gpt4 book ai didi

javascript - gulp.dest 没有创建目标文件夹

转载 作者:数据小太阳 更新时间:2023-10-29 03:52:48 24 4
gpt4 key购买 nike

我的 gulp 代码部分如下所示

gulp.src(['../application-base/**/**.js', '!../application-base/assets/**/**.js'], { base: './' })
.pipe(gulpPlumber({
errorHandler: function (error) {
console.log(`\nError ${error}`);
this.emit('end');
}
}))
.pipe(gprint(filePath => "Transpiling: " + filePath.replace('..\\application-base\\', '')))
.pipe(babel({ compact: false }))
.pipe(gulp.dest('../application-base-transpiled/'))
.on('end', () => done());

如果我改变

.pipe(gulp.dest('../application-base-transpiled/'))

.pipe(gulp.dest(''))

然后创建转译后的文件,并覆盖原来的文件。问题是

.pipe(gulp.dest('../application-base-transpiled/'))

不保存文件,原路径相同,在application-base-transpiled

如您所见,我使用的是基数,但它似乎可以正常工作。

我错过了什么?

编辑

我仔细看了一下,好像连着

.pipe(gulp.dest('../application-base-transpiled/'))

Gulp 仍在将转译后的文件放入原始位置,覆盖原始文件。我传递的 dest 有一些 Gulp 不喜欢的东西,并且默默地忽略了。

编辑 2

似乎删除 base 选项解决了这个问题,这与我在别处看到的建议相反。 gulp.dest 的文档并没有真正讨论这个。

谁能对此提供一些见解?

编辑 3

根据斯文的回答,我试过了

gulp.src(['**/**.js', '!assets/**/**.js'], { base: '../application-base' })
.pipe(gulpPlumber({
errorHandler: function errorHandler(error) {
console.log('\nError ' + error);
this.emit('end');
}
}))
.pipe(gprint(filePath => "Transpiling: " + filePath.replace('..\\application-base\\', '')))
.pipe(babel({ compact: false }))
.pipe(gulp.dest('../application-base-transpiled/'))
.on('end', () => done());

但似乎 base 被忽略了,我当前目录中的文件被抓取并就地转译(我最不想做的事 - 幸运的是 GIT 有助于消除损害)。

src 使用数组时是否忽略基本参数?

最佳答案

在 gulp 流中,文件的目标路径遵循以下伪等式:

gulp.dest + (gulp.src 无前导 base) = 文件的目标路径

例子:

gulp.src('src/js/foo.js', {base:'src/'}).pipe(gulp.dest('dist/'));

结果:

'dist/' + ('src/js/foo.js' 无前导 'src/') = 'dist/js/foo.js'

在你的情况下:

'../application-base-transpiled/' + ('../application-base/foo/bar.js' 无前导 './') = '../application-base-transpiled/../application-base/foo/bar.js'

因此您的文件最终位于原始目录中。

您必须将 {base: '../application-base/'} 传递给 gulp.src() 才能使您的示例正常工作。


注意

您仍然需要在 src 路径中包含 '../application-base/'base 的目的是根据我上面的等式操纵目标路径;它不会用于减少您在 gulp.src 中键入的击键次数。所以最终的结果应该是这样的

gulp.src(['../application-base/**/**.js'], { base: '../application-base' })
.pipe(gulpPlumber({
errorHandler: function errorHandler(error) {
console.log('\nError ' + error);
this.emit('end');
}
}))
.pipe(gprint(filePath => "Transpiling: " + filePath.replace('..\\application-base\\', '')))
.pipe(babel({ compact: false }))
.pipe(gulp.dest('../application-base-transpiled'))
.on('end', () => done());

如果你不通过 base option gulp.src() 设置了默认值:

Default: everything before a glob starts (see glob2base)

这意味着您传递给 gulp.src() 的模式中直到第一个 *** 的所有内容用作 base 选项。由于您的模式是 ../application-base/**/**.js,因此您的 base 选项会自动变为 ../application-base/.

关于javascript - gulp.dest 没有创建目标文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631746/

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