Gulp缩小并移动具有相同文件夹结构的文件

问题描述 投票:0回答:2

我有这样的文件夹结构:

  • dist /
  • src /
    • index.php
    • 项目/
      • 某些项目/
        • main.css
        • main.js
        • index.html
      • 第N个项目/ ...

我需要缩小src /中的每个项目并将其移至dist /,而不会破坏文件夹结构。应该看起来像这样:

  • dist /

    • index.php
    • 项目/

      • some-project /

        • main.css(minified)
        • main.js(minified)
        • index.html
      • 第N个项目/(也已缩小)...

  • src /

    • index.php
    • 项目/
      • 某些项目/
        • main.css
        • main.js
        • index.html
      • 第N个项目/ ...

感谢您的时间。

gulp
2个回答
0
投票

我用这样的东西解决了。如果有人要使用:

.pipe(gulp.dest(function(file){
            let splittedUrl = file.history[0].split("\\");
            let projectName = splittedUrl.slice(splittedUrl.indexOf("projects"),-1);
            //console.log(projectName.join("/"));
            return "dist/" + projectName.join("/");
        }));

0
投票
gulp.task("projectTest", () => {

  return gulp.src("./src/projects/**/*.css")
    // minify pipe, etc.
    .pipe(gulp.dest('dist/projects'))
});

来自https://gulpjs.com/docs/en/api/concepts#glob-base

glob base-有时称为glob parent-是路径段在全局字符串中的任何特殊字符之前。因此,全球基地/src/js/**.js的值为/src/js/。所有与glob匹配的路径都是保证共享全局基数-路径段不能变量。

src()生成的Vinyl实例是用glob base构建的设置为其base属性。当用写入文件系统时dest()base将从输出路径中删除以保留目录结构。

写起来有点令人困惑。在我的代码中,globstar **之前的部分是base。因此,./src/projects/是基础。

dest管道中,目录结构(project1,project2等)仍然存在,但将被发送到dest文件夹,而开头没有base路径。因此,如果需要,您将需要将该base路径的任何部分添加回dest文件夹。

因此,gulp.dest('dist/projects')根据需要将保留的文件夹结构放回到projects下。

© www.soinside.com 2019 - 2024. All rights reserved.