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( ‘../应用碱基transpiled /’))
至
.pipe(gulp.dest( ”))
然后创建转换后的文件,并覆盖原件.问题是
.pipe(gulp.dest( ‘../应用碱基transpiled /’))
在application-base-transiled下,不保存具有相同原始路径的文件
正如你所看到的,我正在使用一个基础,这看起来不然.
我错过了什么?
编辑
我仔细观察,看起来甚至还有
.pipe(gulp.dest( ‘../应用碱基transpiled /’))
Gulp仍然将已编译的文件放入原始位置,覆盖原始文件.有一些关于我正在传递的目标,Gulp不喜欢,并且默默无视.
编辑2
似乎删除基本选项解决了这个问题,这与我在别处看到的建议相反. 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\\',() => done());
但似乎忽略了基础,并且我自己当前目录中的文件被抓取并转换到位(我想要的最后一件事 – 幸运的是GIT有助于消除损坏).
使用src数组时是否忽略base参数?
解决方法
gulp.dest(gulp.src没有前导基数)=文件的dest路径
例:
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的目的是操纵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());
如果没有将base
option传递给gulp.src(),则设置默认值:
Default: everything before a glob starts (see 07001)
这意味着,传递给gulp.src()的模式中的第一个**或*之前的所有内容都将用作基本选项.由于您的模式是../application-base/**/**.js,您的基本选项会自动变为../application-base/.