微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

吞下具有多个目标的相同 src,一个有基,一个没有基

如何解决吞下具有多个目标的相同 src,一个有基,一个没有基

我有一个 gulpfile.js,我需要有多个目的地的相同 src glob。但是正如在此 answer 中指定的那样,如果我指定 base,那么我从 some 开始的整个目录都将被复制到 pubdir,这是一个问题。

var moduleglob = 'some/path/more/' + themeconfig.name + '/' + '**/**/styles/some.scss';

gulp.src(moduleglob,{ base: "./" })
        .pipe(sourcemaps.init({loadMaps: true}))
        .pipe(sass().on('error',sass.logError))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest("."))

gulp.src(moduleglob)
        .pipe(sourcemaps.init({loadMaps: true}))
        .pipe(sass().on('error',sass.logError))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest(pubdir))

有没有办法将上述两个代码合并为一个,同时能够定位到两个正确的文件夹,即一个关于 root 的文件夹和一个关于 pubdir 的文件夹?

解决方法

Gulp 可以在 gulp 重命名插件的帮助下重命名目录。

起初我不知道它是如何工作的,但在我了解之后我才知道它实际上是一个非常酷的插件。

这个插件所做的只是重命名删除默认 gulp src 和 dest 行为的基础后复制的路径。

所以原始目录一直从所有之前的 glob 模式中获取 file.base,因此 file.base'some/path/more/' + themeconfig.name 但即使在这个 glob 之后我也需要一些修改。

当它在 pubdir 上放置结果时,我想从序列中删除一个名为 web 的目录。

此外,我更改了 dest 函数上的 file.base,因此在放入 pubdir 时它不会相对于那里的原点,并且会在从序列中删除 web 后放置目录。

所以上面两个命令可以这样写。

gulp.src(moduleglob,{ base: "./" })
        .pipe(sourcemaps.init({loadMaps: true}))
        .pipe(sass().on('error',sass.logError))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest("."))
        .pipe(rename(function (path) {
            // Updates the object in-place
           let newpathdir = path.dirname.replace('web/','');
           return {
              dirname: newpathdir,basename: path.basename,extname: path.extname
            };
           
        }))
        .pipe(gulp.dest(function(file){
            file.base = 'some/path/more/' + themeconfig.name;
            return pubdir;
        }))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。