我的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());
Run Code Online (Sandbox Code Playgroud)
如果我改变
.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仍然将已编译的文件放入原始位置,覆盖原始文件.有一些关于我正在传递的目标,Gulp不喜欢,并且默默无视.
编辑2
似乎删除该base选项解决了这个问题,这与我在别处看到的建议相反.这些文档gulp.dest并没有真正讨论这个问题.
任何人都可以对此提供一些见解吗?
编辑3
Per Sven的回答,我尝试过这个
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());
Run Code Online (Sandbox Code Playgroud)
但似乎基础被忽略了,我自己当前目录中的文件被抓取并转换到位(我想要的最后一件事 - 幸运的是GIT有助于消除损坏).
使用数组时是否忽略base参数src?
在gulp流中,文件的目标路径遵循以下伪方程:
gulp.dest+(gulp.src不带前导base)=文件的dest路径
例:
gulp.src('src/js/foo.js', {base:'src/'}).pipe(gulp.dest('dist/'));
Run Code Online (Sandbox Code Playgroud)
结果:
'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()你的例子.
注意
您仍然需要包含'../application-base/'在您的src路径中.根据base上面的等式,目的是操纵dest路径; 它不能用于减少您键入的击键次数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());
Run Code Online (Sandbox Code Playgroud)
如果未将base选项传递gulp.src()给默认值,则设置:
默认值:在glob开始之前的所有内容(请参阅glob2base)
这意味着您传递给第一个**或*模式的所有内容都将gulp.src()用作base选项.由于您的模式是../application-base/**/**.js,您的base选项会自动变为../application-base/.
| 归档时间: |
|
| 查看次数: |
5882 次 |
| 最近记录: |