这是我的gulpfile.js
var gulp = require('gulp');
var browserify = require('browserify');
var source = require("vinyl-source-stream");
var reactify = require("reactify");
var watchify = require('watchify');
var gutil = require('gulp-util');
var paths = {
scripts: ['src/jsx/index.jsx']
};
gulp.task('browserify', function(){
var bundler = watchify(browserify('./src/jsx/index.jsx', watchify.args));
bundler.transform(reactify);
bundler.on('update', rebundle);
function rebundle() {
return bundler.bundle()
// log errors if they happen
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
.pipe(source('bundle.js'))
.pipe(gulp.dest('./public/js'));
}
return rebundle();
});
gulp.task('watch', function() {
gulp.watch(paths.scripts, ['browserify']);
});
然后我的命令行输出如下所示:
$ gulp watch
[15:10:41] Using gulpfile ~/blizztrack/dashboard/gulpfile.js
[15:10:41] Starting 'watch'...
[15:10:41] Finished 'watch' after 9.95 ms
保存index.jsx
[15:10:45] Starting 'browserify'...
[15:10:51] Finished 'browserify' after 5.33 s
第二次保存index.jsx
[15:11:08] Starting 'browserify'...
[15:11:10] Finished 'browserify' after 2.02 s
第三次保存index.jsx
无输出。
这似乎完全是我想要的前两次,然后它就停止观看了。有人能指出我正确的方向吗?
答案 0 :(得分:10)
刚遇到这个问题。在网上浏览了几个小时的答案后,我尝试在记事本中编辑文件而不是PHPStorm IDE。事实证明,browserify / watchify继续通过记事本工作。
那是我试图玩一些设置的时候。结果发现PHPStorm /系统设置/使用"安全写入"如果启用,则在PHPStorm编辑文件后停止监视。
当我转身时,所有的问题都神奇地消失了#34;安全的写作"关闭。我不确定你使用的是什么IDE,但也许有一个" Safe Write"选项也是。
答案 1 :(得分:5)
当我第一次使用watchify来加速浏览js编译时,这对我来说并不明显。使用 watchify gulp.watch时不再需要。要在输出/任务窗口中查看编译/构建时间,您可以执行以下操作(请注意gutil.log命令):
var gulp = require('gulp');
var gutil = require('gulp-util');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var watchify = require('watchify');
var browserify = require('browserify');
var bundler = watchify(browserify('./src/app.js', watchify.args));
gulp.task('browserify', bundle);
bundler.on('update', bundle);
function bundle() {
var start = new Date().getTime();
var b = bundler.bundle()
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(gulp.dest('./src/dist'));
var end = new Date().getTime();
var time = end - start;
gutil.log('[browserify]', 'rebundle took ', gutil.colors.cyan(time + ' ms'));
return b;
}
看看是否有帮助。
答案 2 :(得分:4)
这是我的新工作gulp文件的样子。没有给我任何问题并完成同样的事情。非常确定@Ben是正确的 - gulp.watch和watchify相互矛盾。
var gulp = require('gulp');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var watchify = require('watchify');
var reactify = require('reactify');
var chalk = require('chalk');
var gcallback = require('gulp-callback');
var moment = require('moment');
var gutil = require('gutil');
var jsDest = '../../server/webship/html/html/static/js';
var viewsDir = './js/views';
var watchifyArgs = watchify.args;
watchifyArgs.debug = true;
var bundler = watchify(browserify('./js/views/main.jsx', watchifyArgs));
// add any other browserify options or transforms here
bundler.transform(reactify);
bundler.on('time', function (time) {
var durationOfBundleBuild = moment.duration(time).asSeconds();
console.log(chalk.green('Updated'), ' bundle in ', chalk.bold(durationOfBundleBuild + 's'), '\n');
});
gulp.task('watch', function() {
bundle(true);
bundler.on('update', function() {
console.log('updating...');
bundle(true);
});
});
gulp.task('build', function() {
bundle();
bundler.close();
});
function bundle(watching) {
console.log(chalk.yellow('Updating') + ' bundle...');
bundler.bundle()
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
.pipe(source('bundle.js'))
.pipe(gulp.dest(jsDest))
.pipe(gcallback(function() {
if (!watching) {
process.nextTick(function() {
process.exit(0);
});
}
}));
}
答案 3 :(得分:2)
我认为watchify
和gulp.watch
在尝试重建捆绑包时可能会发生冲突。我会删除watch
任务,只需直接使用browserify
任务。
答案 4 :(得分:0)
如果您正在使用vim并遇到此问题,且不同时使用watchify
和gulp.watch
,请尝试执行:set noswapfile
,或在set noswapfile
中添加.vimrc
。
我相信这个解决方法有效,因为vim的方法是在你工作时创建和编辑.swp文件,然后在实际保存时用交换文件替换文件干扰watchify接收文件的能力系统事件。
请注意,:set noswapfile
表示您的修改 保存到磁盘,直到您实际执行:w
!