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

我的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( ‘../应用碱基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流中,文件的目标路径遵循以下伪方程:

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/.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...