gulp任务共享一个没有全局对象的公共设置

时间:2015-11-24 19:26:45

标签: javascript node.js gulp global

我有许多gulp任务,每个任务都驻留在自己的文件中(使用require-dir模块),而不是整体文件。

我使用模块进行配置设置而不是json文件(我更喜欢注释和派生值)。

为了简单起见,我需要在gulp任务之间共享/设置一个密钥的示例设置。

/config/index.js

>>> D = {}
>>> for n in alist:
    if n in D.keys():
        D[n] += 1
    else:
        D[n] = 1


>>> D
{1: 1, 2: 1, 5: 1, 6: 1, 7: 2, 9: 1}

这是默认任务,我想将config.buildType设置为' dev'

default.js

var config = {}

config.buildType  = '';  // set this to either 'dev' or 'dist'

module.exports = config;

这是一个部署任务,我想将buildType设置为' dist'

deploy.js

var gulp = require('gulp');
var config = require('../config/');

gulp.task('default', ['build'], function(cb) {
}); 

这是我想要基于buildType

更改的构建任务

build.js

var gulp         = require('gulp');
var config = require('../config/');

gulp.task('deploy-s3', ['build'], function() {

}); 

所以这就是问题如果我在default.js中设置var gulp = require('gulp'); var runSequence = require('run-sequence'); var config = require('../config/'); gulp.task('build', function(cb) { console.log('in build',config.buildType); if (config.buildType == 'dev') runSequence('clean',['sass',config.htmlGenerator], 'watch', cb); if (config.buildType == 'dist') runSequence('clean',['sass',config.htmlGenerator], cb); }); 或在gulp.task之外设置deploy.js,那么因为它们都被require-dir整合到一个文件中value只是最后加载的文件。如果我在gulp.task函数中设置它,我对该设置的时间/范围感到困惑。

更新:发现此相关问题https://github.com/gulpjs/gulp/issues/193。在本期杂志中指出,任务函数在所有排队任务之后启动,这意味着我无法在任务函数中设置某些内容并期望在列出的任务之前执行它(在我的情况下' build& #39;)

一张海报的任务是设置像这样的参数

config.buildType

所以一些建议......我是否会采用这种方式" hack"或者有更好的方法吗?

(fyi,我自己学习节点/ javascript只需几个月,所以我的经验有限)

2 个答案:

答案 0 :(得分:0)

您可以使用process.env来保存项目的配置属性。检查this

在您的情况下,您可以这样做:

var gulp         = require('gulp');
var runSequence = require('run-sequence');

gulp.task('build', function(cb) {
if (process.env.NODE_ENV === 'development') {
  runSequence('clean',['sass',config.htmlGenerator], 'watch', cb);
} else {
  runSequence('clean',['sass',config.htmlGenerator], cb);
}
});
  • gulp build NODE_ENV=production生产
  • gulp build NODE_ENV=development

这将与Travis等现有的CI工具很好地配合使用。

答案 1 :(得分:0)

决定放弃这个' build'任务完全。在gulp 4.0发布后,它有望以某种类似的形式工作。它允许我在调用其他任务之前修改任何设置。可以在像我这样的任务中使用它与gulpif'任务是一个仅管道任务。仍然想知道是否有更好的"方式。

var gulp = require('gulp');
var config = require('../config/');
var runSequence = require('run-sequence');

gulp.task('default', function(cb) {
config.buildType='dev'
config.url = 'http://localhost:' + config.localport;
runSequence('clean',['sass',config.htmlGenerator],'watch', cb);
});