我创建了一个gulp任务,用于使用browserify捆绑模块,我使用watchify来监视更改。以下是watchify的一项任务:
gulp.task('watch:browserify', function () {
var opts = assign({}, watchify.args, {
entries: ['./js/app.js'],
debug: true,
basedir: './app/',
paths: ['./lib']
});
var b = watchify(browserify(opts));
b.on('update', function () {
bundle();
});
function bundle() {
gutil.log(gutil.colors.blue("Starting Browserify..."));
var time = Date.now();
return b.bundle()
.on('error', gutil.log.bind(gutil, gutil.colors.red('Browserify Error')))
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('app'))
.on('end', function () {
var duration = Date.now() - time;
gutil.log(gutil.colors.blue('Finished Browserify') + " (%dms)", duration);
})
}
bundle();
});
如果我编辑主js文件(./js/app.js),则始终检测到更改。但是,当我编辑主文件所需的其他文件时,大致每隔一段时间(但并非总是)检测到更改。我在这里做错了吗?
Here is the full Github repo所以也许你可以完全了解我如何计划这项工作
答案 0 :(得分:1)
您的代码示例存在两个问题。
首先,watch:browserify
必须采取回调或返回流,否则可能会出现竞争条件,如here所述。因此,例如,您的任务中的最后一行可能是return bundle();
。
其次,使用watchify时,必须将cache
和packageCache
选项传递给browserify()
,如下所示并指定here。
var b = browserify({ cache: {}, packageCache: {} });
最后,确保app.js
实际上依赖于其依赖链中的某个位置,而不是您正在编辑的其他文件。
答案 1 :(得分:0)
我遇到了同样的问题,我把@akarve提到的所有内容设置正确。我回到watchify: "^2.6.0"
,问题得到了解决。然而,构建/检测时间稍微慢一点 - 大约半秒钟。然而,偶尔(通常!)没有比watchify检测到我的更改更好。
此处的相关讨论(也是我发现有关v2.6.0的评论的地方) - https://github.com/substack/watchify/issues/216#issuecomment-119285896