从子目录运行gulp?

4
我目前有这样的文件结构:
SASS
    gulpfile.js
    node_modules
    sites
        example-site
            scss
            css
        example-site-two
            scss
            css
        example-site-three
            scss
            css

我已经在主SASS文件夹中安装了gulp,并创建了一个名为“sass-all”的任务,可以遍历每个站点的scss文件夹并将其编译成css。
我正在尝试编写一个名为“sass-single”的新任务,该任务可以从任何示例站点文件夹中运行。例如,假设我在“example-site-two”文件夹中,我希望能够使用命令“gulp sass-single”,并且只编译此站点的SASS。同样,我还想设置一个名为“watch-single”的任务。
问题是,无论我从哪个站点文件夹运行此任务,它都会更改我的工作目录到父SASS文件夹。我不想为每个不同的站点创建100个不同的任务,我宁愿只有一个“sass-single”任务,它足够智能,可以仅编译我运行脚本时所在文件夹中的文件。
当前的Gulp任务尝试如下:
    gulp.task('sass-single', function () {
      process.chdir('./');

      // Where are the SCSS files?
      var input = './scss/*.scss';

      // Where do you want to save the compiles CSS file?
      var output = './css';

      return gulp
        .src(input)
        .pipe(sourcemaps.init())
        .pipe(sass(sassOptions).on('error', sass.logError))
        .pipe(postcss(processors))
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest(output));
    });

然而,这会回到主SASS文件夹,然后什么也不做。我该如何修改它,使其能够在任何站点文件夹中运行,并且只对该站点进行操作?
1个回答

11

如果你想将当前工作目录(CWD)更改回你调用 gulp 的目录,那么这种方法行不通:

process.chdir('./');

那是一个相对路径。相对路径是相对于当前工作目录(CWD)的。但当你执行 process.chdir('./') 时,Gulp 已经将 CWD 更改为 Gulpfile.js 所在的目录。所以你只是把 CWD 改回了当前目录。

你可以在命令行上显式地传递一个 CWD 给 gulp

SASS/sites/example-site> gulp --cwd .

但是那很快就会变得很烦人。

幸运的是,Gulp在改变当前工作目录之前将原始CWD存储在process.env.INIT_CWD。因此,您可以在任务中使用以下代码将CWD更改回原始值:

process.chdir(process.env.INIT_CWD);

1
只是想说,你已经连续两天帮助了我,非常感谢!我还在逐渐掌握gulp的使用,哈哈。 - Xander
2
需要用红色高亮显示 process.env.INIT_CWD,字体大小为100px。谢谢! - Dogoku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接