gpt4 book ai didi

javascript - 在 gulp 任务中使用 Inkscape 处理 SVG 时遇到问题

转载 作者:行者123 更新时间:2023-11-29 21:16:10 25 4
gpt4 key购买 nike

好吧,我正在尝试为 gulp 任务中的每个文件执行一个 inkscape 任务。

我的想法是转换复合路径中的每个 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'));
});

问题是,这个 npm 包 Inkscape 使用流,所以我应该以某种方式管道 Inkscape 输出并写回 gulp 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)

有人可以帮帮我吗?

最佳答案

file.contents属性不必是 Buffer。也可以是流。您所要做的就是通过 buffer:false optiongulp.src()

然后它就像用通过调用 .pipe() 创建的新流替换现有的 file.contents 流一样简单:

var gulp = require('gulp');
var map = require('event-stream').map;
var Inkscape = require('inkscape');

gulp.task('minify-shapes', function() {
return gulp.src('app/assets/shapes/**/*.svg', { buffer:false })
.pipe(map(function(file, done) {
var svgConverter = new Inkscape([
'--verb=ObjectToPath',
'--export-plain-svg'
]);

file.contents = file.contents.pipe(svgConverter);
done(null, file);
}))
.pipe(gulp.dest('app/assets/shapes'));
});

关于javascript - 在 gulp 任务中使用 Inkscape 处理 SVG 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com