为什么Gulp不保留从dest函数返回的文件名?

时间:2015-09-08 11:32:34

标签: javascript gulp

我有以下文件路径:

resources/assets/css/site1/app.css
resources/assets/css/site2/app.css
resources/assets/css/common/common.css

我想将它们复制到public文件夹而不保留我的嵌套文件夹结构。显然,我需要修改目标文件名,因为我在这里有两个app.css。因此,我决定将路径的最后一个文件夹作为文件名的前缀(并添加-dev后缀,因为这些文件仅用于开发模式,并且在使用elixir minification构建最终版本时将被删除)。结果我应该得到:

public/css/site1-app-dev.css
public/css/site2-app-dev.css
public/css/common-common-dev.css

现在我有以下gulp代码:

gulp.src("resources/assets/css/**/*.css")
    .pipe(gulp.dest(
    function(file) { 
        var newPath = "public/css/" + 
           // folder name, like admin or public
           path.basename(path.dirname(file.path)) + "-" +
           path.basename(file.path, ".css") + "-dev.css";

        console.log(newPath);

        return newPath;
    }));

我看到控制台按预期输出结果。但最后我得到以下文件:

public/css/site1-app-dev.css/site1/app.css
public/css/site2-app-dev.css/site2/app.css
public/css/common-common-dev.css/common/common.css

显然,gulp会将newPath视为文件夹名称,以便在复制与**/*.css匹配的文件并保留文件夹层次结构时使用。

有没有办法告诉gulp我真的希望它将newPath视为最终目标文件名而不是目录?

1 个答案:

答案 0 :(得分:1)

使用base在文件名上添加后缀,指定var rename = require('gulp-rename'); gulp.src("resources/assets/css/**/*.css", {base: 'resources/assets/css/'}) .pipe(rename({ suffix: "-dev", })) .pipe(gulp.dest("public/css/")); 以保留嵌套文件夹结构。

IsEditable

https://www.npmjs.com/package/gulp-rename