模块化应用

时间:2017-04-27 02:35:12

标签: module gulp gulp-rename gulp-task

我正在尝试为模块化应用程序设置gulp。在我的公共文件夹中,我有每个模块都有自己的src/sassdist/css文件夹。我想将sass文件从src/sass转换并传输到各自的dist/css文件夹。在src/sass下可能还有更多文件夹,例如src/sass/adminsrc/sass/user,其中包含.scss。这些文件夹结构也应该像dist/css一样在dist/css/admindist/css/user中复制。这些附加文件夹取决于模块。

问题是可以删除和添加模块,因此我不想直接在gulp.dest路径中引用模块名称。我需要它是动态的,具体取决于gulp.src路径。

我们说我的文件夹结构如下所示。

public
    |-- Modules
        |-- Module1
        |   |-- dist
        |   |   |-- css
        |   |   |   |-- style.css
        |   |-- src
        |       |-- sass
        |           |-- style.scss
        |-- Module2
        |   |-- dist
        |   |   |-- css
        |   |       |-- admin
        |   |       |   |-- style.css
        |   |       |-- user
        |   |           |-- style.css
        |   |-- src
        |       |-- sass
        |           |-- admin
        |           |   |-- style.scss
        |           |-- user
        |               |-- style.scss
        |-- Module3
            |-- dist
            |   |-- css
            |       |-- style.css
            |-- src
                |-- sass
                    |-- style.scss

以下是我尝试过的gulp任务。

1。使用path.join

gulp.task('sass-modules', function () {
    gulp.src('public/Modules/**/src/sass/**/style.scss', {base: "./"})
    .pipe(sass())
    .pipe(gulp.dest(function(file) {
        return path.join(path.dirname(file.path), '???/dist/css');
    }))
    .pipe(gulp.dest('./'));
});

2。使用重命名

gulp.task('sass-modules', function () {
    gulp.src('public/Modules/**/src/sass/**/style.scss', {base: "./"})
    .pipe(sass())
    .pipe(rename(function (path) {
        path.dirname += "???/dist/css";
    }))
    .pipe(gulp.dest('./'));
});

我不确定要写什么而不是" ???"。我尝试了多种变种,例如'../../../dist/css',似乎所有人都尝试将我的css文件转移到类似public/Modules/Module1/dist/css/Module1/src/sassdist/public/...的内容。到目前为止,还没有任何工作。

我在发布之前通过StackOverflow进行了检查,但我无法找到我需要的内容。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我修好了! 我还是想知道这是否是一个很好的解决方案?

.pipe(rename(function (path) {
    path.dirname = path.dirname.replace('src', 'dist').replace('sass', 'css');
}))