从子目录运行gulp?

Xan*_*der 2 gulp

我目前有这样的文件结构

SASS
    gulpfile.js
    node_modules
    sites
        example-site
            scss
            css
        example-site-two
            scss
            css
        example-site-three
            scss
            css
Run Code Online (Sandbox Code Playgroud)

我已经在主要的父SASS文件夹中安装了gulp,其中包含一个任务'sass-all',它可以遍历每个站点的scss文件夹并将其编译成css.

我正在尝试编写一个名为"sass-single"的新任务,可以从任何示例站点文件夹运行.所以,假设我在文件夹"example-site-two"中,我希望能够cmd并执行'gulp sass-single',并且只能在此站点中编译SASS.我想设置的单一任务也是一样的.

问题是每当我从站点文件夹运行此任务时,它会将我的工作目录更改为父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));
    });
Run Code Online (Sandbox Code Playgroud)

然而,这可以追溯到主SASS文件夹,然后什么都不做.我如何修改它以便能够从任何站点文件夹运行并让它只为该站点执行?

Sve*_*ung 7

如果要将当前工作目录(CWD)更改回您调用的目录,gulp那么这将不起作用:

process.chdir('./');
Run Code Online (Sandbox Code Playgroud)

那是一条相对的道路.相对路径相对于CWD.但是当你执行process.chdir('./')Gulp时,已经将CWD更改为Gulpfile.js所在的目录.所以你只是将CWD改为...... CWD.

您可以gulp在命令行上显式传递CWD :

SASS/sites/example-site> gulp --cwd .
Run Code Online (Sandbox Code Playgroud)

但这很快就会变得烦人.

幸运的是咕嘟咕嘟店原来CWDprocess.env.INIT_CWD变化之前.因此,您可以在任务中使用以下内容将CWD更改回原始:

process.chdir(process.env.INIT_CWD);
Run Code Online (Sandbox Code Playgroud)

  • `process.env.INIT_CWD` 需要以红色突出显示,字体大小为 100px。谢谢! (2认同)