まあ、私はgulpタスクのすべてのファイルに対してinkscapeタスクを実行しようとしています。gulpタスクでInkscapeを使用してSVGを使用する際に問題が発生する
アイデアは、私が複合パス(1つの複合パスだけで構成されたSVG)にあるすべてのSVGファイルを変換することです。私はこのようなものでこれを達成しようとしている
:
gulp.task('minify-shapes', function() {
function makeChange() {
var Stream = require('stream');
function transform(file, cb) {
var svgConverter = new Inkscape(['--verb=ObjectToPath', '--export-plain-svg']);
var stdout = new Stream();
var bufs = [];
console.log(file.history);
stdout.on('data', function(d) {
bufs.push(d);
});
stdout.on('end', function() {
var buf = Buffer.concat(bufs);
file.contents = buf;
cb(null, file);
});
file.pipe(svgConverter).pipe(stdout);
}
return require('event-stream').map(transform);
}
return gulp.src('app/assets/shapes/**/*.svg')
.pipe(makeChange())
.pipe(gulp.dest('app/assets/shapes'));
});
問題があり、Inkscapeのは、ストリームと連携し、このNPMパッケージ、私は何とかパイプInkscapeの出力とfile.contentsを飲み込むために書き戻す必要があります。
このInkscapeストリーム出力のバッファへの変換が非同期であるため、gulpタスクフローと同期して動作しないため、これは機能しないようです。
私が受けてるのエラーは次のとおりです。
stream.js:59
dest.end();
^
TypeError: dest.end is not a function
at Inkscape.onend (stream.js:59:10)
at emitNone (events.js:91:20)
at Inkscape.emit (events.js:185:7)
at Inkscape.<anonymous> (node_modules\inkscape\lib\Inkscape.js:161:26)
at emitNone (events.js:91:20)
at ReadStream.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:926:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
誰かが私を助けることができますか?
別のエラーが表示されます: [20:16:28] 'minify-shapes'を開始しています... events.js:160 throw er; //処理されていない 'error'イベント ^ エラー:ストリーミングがサポートされていません –
ストリームをサポートしていないパイプで別のプラグインを使用していたため、忘れました。 –