我的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仍然将已编译的文件放入原始位置,覆盖原始文件。有一些关于我正在传递的目标,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());
但似乎基础被忽略了,我当前目录中的文件被抓取并转换到位(我想要的最后一件事 - 幸运的是GIT有助于消除损坏)。
使用src
数组时是否忽略了基本参数?
答案 0 :(得分:6)
在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()
才能使您的示例正常运作。
注意强>
您仍然需要在'../application-base/'
路径中加入src
。 base
的目的是按照上面的等式来操纵dest路径;它 not 的目的是减少您在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()
,则会设置默认值:
默认值:在glob开始之前的所有内容(请参阅glob2base)
这意味着您传递给**
的模式中的第一个*
或gulp.src()
的所有内容都将用作base
选项。由于您的模式为../application-base/**/**.js
,因此base
选项会自动变为../application-base/
。