【发布时间】:2016-09-14 18:26:54
【问题描述】:
我在我正在 WebStorm 中开发的 Angular 项目中使用 babelify 为 browserify 做了一个 gulp 任务。首先,我应该说,这段代码可以完美运行。
我的浏览器包如下:
const appBundle = browserify({
entries: config.client.src.appModule, // main angular app file
debug: TRUE,
packageCache: {},
cache: {}
}).transform(babelify, {only: './src/client'}).on('log', gutil.log);
而我的 gulp.task 是这样的:
gulp.task('browserify', ['jshint'], function () {
return appBundle.bundle()
.on('error', function (err) {
gutil.log('Browserify error: ' + gutil.colors.red(err.message));
})
.pipe(source('app.js')) // main dist file
.pipe(gulp.dest('./dist'));
});
问题我完全看不懂:
我的问题是:为什么我的 gulp 任务在完成其工作后没有终止?我应该始终通过单击 WebStorm 中的方形按钮手动停止它。
更新 1
我发现如果我直接通过“browserify”捆绑包而不使用变量appBundle,问题就解决了。于是代码变成:
browserify({
entries: config.client.src.appModule, // main angular app file
debug: TRUE,
packageCache: {},
cache: {}
}).transform(babelify, {only: './src/client'}).on('log', gutil.log)
.bundle().on('error', function (err) {
gutil.log('Browserify error: ' + gutil.colors.red(err.message));
})
.pipe(source('app.js')) // main dist file
.pipe(gulp.dest('./dist'));
它有效! 但主要的困难是我在我的 watchify 任务中使用了这个 appBundle,所以我没有想要复制捆绑包。
更新 2
几个小时后,我再次发现,这就是我的 watchify 任务所关心的问题。漏洞代码是这样的:
const appBundle = browserify({
entries: config.client.src.appModule, // main js file
debug: TRUE,
packageCache: {},
cache: {}
}).transform(babelify, {only: './src/client'});
const b = watchify(appBundle);
function rebundle(bundler) {
return bundler
.bundle()
.on('error', function (err) {
gutil.log('Browserify error: ' + gutil.colors.red(err.message));
})
.pipe(source('app.js'))
.pipe(gulp.dest('./dist'));
}
gulp.task('watchify', function () {
rebundle(b);
b.on('update', function () {
rebundle(b)
});
b.on('log', gutil.log); // output build logs to terminal
});
gulp.task('browserify', ['jshint'], function () {
rebundle(appBundle);
});
当我将 const b 的声明放入我的 watchify 任务中时,一切都开始正常工作了。
但最后一个问题是:为什么它开始起作用了?
【问题讨论】:
标签: javascript angularjs gulp browserify babeljs