从子目录运行gulp?

时间:2016-04-27 13:27:04

标签: 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文件夹中安装了gulp,其中包含一个任务'sass-all',它可以遍历每个站点的scss文件夹并将其编译成css。

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

问题是每当我从站点文件夹运行此任务时,它都会将我的工作目录更改为父SASS文件夹。我不希望每个不同的站点都有100个不同的任务,我更喜欢只有一个'sass-single'任务足够智能,只能编译我运行脚本时所在文件夹中的文件。< / p>

当前Gulp任务尝试

  <system.webServer>
<handlers>
  <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>

然而,这会回到主SASS文件夹,然后什么都不做。  我如何修改它以便能够从任何站点文件夹运行并让它只为该站点执行此操作?

1 个答案:

答案 0 :(得分:7)

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

process.chdir('./');

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

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

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

但那很快就会烦人。

幸运的是process.env.INIT_CWDprocess.chdir(process.env.INIT_CWD); 之前更改了它。因此,您可以在任务中使用以下内容将CWD更改回原始文件:

IEnumerable<T>