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

Ada*_*kis 10 javascript gulp

我的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

Sve*_*ung 8

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