【问题标题】:Gulp: Passing multiple command line parameters to the same taskGulp:将多个命令行参数传递给同一个任务
【发布时间】:2018-03-06 21:48:00
【问题描述】:

目标: 通过使用标志 --theme 在命令行中传递参数来构建 /src/assets/(theme)/*.scss。我使用 gulp-utils 解决了第一步

function sass() {
  // return gulp.src('/src/assets/scss/**/*.scss')
  return gulp.src(['src/assets/scss/' + (util.env.theme ? util.env.theme : 'app') + '.scss'])
    .pipe($.sourcemaps.init())
    .pipe($.sass({
      includePaths: PATHS.sass
    })
      .on('error', $.sass.logError))
    .pipe($.autoprefixer({
      browsers: COMPATIBILITY
    }))
    // Comment in the pipe below to run UnCSS in production
    //.pipe($.if(PRODUCTION, $.uncss(UNCSS_OPTIONS)))
    .pipe($.if(PRODUCTION, $.cleanCss({ compatibility: 'ie9' })))
    .pipe($.if(!PRODUCTION, $.sourcemaps.write()))
    .pipe(gulp.dest(PATHS.dist + '/assets/css'))
    .pipe(browser.reload({ stream: true }));
}

剩余gulp build --production --theme folderName1, folderName2, folderName* 将多个主题值 --theme folderName1 folderName2 传递给同一个 sass() 函数/任务。

这会将文件夹名称发送到函数 sass()

function sass() {
  // return gulp.src('/src/assets/scss/**/*.scss')
  return gulp.src([
     'src/assets/scss/folderName1/*.scss',
     'src/assets/scss/folderName2/*.scss',
     'src/assets/scss/folderName3/*.scss'
  ])
    ...

    ...
}

会创建一个像 SitePoint article 这样讨论工作的 argsList 吗?

【问题讨论】:

    标签: command-line gulp parameter-passing


    【解决方案1】:

    请检查您的想法。这个包看起来像解决类似的话题 https://www.npmjs.com/package/gulp-sass-themes 您只需将主题分组到子文件夹中。

    从另一端gulp.src 接受stringarray,因此您可以从命令行传递此信息。 https://github.com/gulpjs/gulp/blob/master/docs/API.md

    【讨论】:

    • 不完全是。从命令行,我想通过gulp build --production --theme folderName1, folderName2, folderName*
    • 您还可以使用包github.com/substack/minimist。然后当你使用命令 --theme folderName1 --theme folderName2.重要的是重复参数名称。在极简主义中,您有描述如何削减它。这个话题在github.com/gulpjs/gulp/issues/439中讨论过
    【解决方案2】:

    我的一位同事能够帮助解决此问题。他可以使用 yargs.argv.theme 和 slipt(,),而不是使用 gulp.utils。这允许用户传递 --theme 参数并根据需要传递尽可能多的逗号分隔项。

      function sass() {
      if (yargs.argv.theme) {
        let collection = yargs.argv.theme.split(','),
          results = collection.map(item =>  `./src/assets/scss/${item}/*.scss`);
    
        return gulp.src(results)
          .pipe($.sourcemaps.init())
          .pipe($.sass({
            includePaths: PATHS.sass
          })
            .on('error', $.sass.logError))
          .pipe($.autoprefixer({
            browsers: COMPATIBILITY
          }))
          // Comment in the pipe below to run UnCSS in production
          //.pipe($.if(PRODUCTION, $.uncss(UNCSS_OPTIONS)))
          .pipe($.if(PRODUCTION, $.cleanCss({ compatibility: 'ie9' })))
          .pipe($.if(!PRODUCTION, $.sourcemaps.write()))
          .pipe(gulp.dest(PATHS.dist + '/assets/css'))
          .pipe(browser.reload({ stream: true }));
      }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多