gulp watch和browserify。手表,但不再建立

时间:2014-08-22 21:49:54

标签: gruntjs gulp grunt-contrib-watch gulp-watch

所以今天是我第一天和jul一起玩gulp和grunt或任何任务跑步者。我到了一个地方,我可以在我的js文件中更改我的代码,然后运行

gulp browserify 

这很好用。然而它很烦人,我想添加一个手表,以便当我对脚本进行任何更改时,它会自动运行浏览器浏览器或其他东西,我不必手动操作。所以这就是我对gulp.js的所作所为

    var gulp = require('./gulp')({


});



gulp.task('watch', function() {
    // Watch .js files
    gulp.watch('jsfolder/**/*.js', ['scripts']);

});
gulp.task('release', ['build']);
gulp.task('build', ['scripts', 'browserify']);
gulp.task('default', ['watch']);

所以当我这样做时

gulp watch

当我保存更改时,它会给我

14:37:21] Starting 'clean'...
[14:37:21] Finished 'clean' after 3.18 ms
[14:37:21] Starting 'concat'...
[14:37:21] Finished 'concat' after 263 μs
[14:37:21] Starting 'checksum'...
[14:37:21] Finished 'checksum' after 19 ms
[14:37:21] Starting 'scripts'...
[14:37:21] Finished 'scripts' after 455 μs
[14:38:41] Starting 'clean'...
[14:38:41] Finished 'clean' after 2.9 ms
[14:38:41] Starting 'concat'...
[14:38:41] Finished 'concat' after 218 μs
[14:38:41] Starting 'checksum'...
[14:38:41] Finished 'checksum' after 18 ms
[14:38:41] Starting 'scripts'...
[14:38:41] Finished 'scripts' after 302 μs

但我的更改从未在页面上显示。我假设它只是观看而不是建设?我错过了什么?

修改

我添加了这个

 gulp.watch('ui.id.go.com/public/**/*.js', ['scripts','browserify']);

但是现在它经常检查它,即使更新,我的机器CPU也开始了!那里有更好的想法吗?

感谢

2 个答案:

答案 0 :(得分:1)

您应该使用WatchifyBrowserify来观看文件更改,同时降低性能成本。当您的应用程序开始扩展时,您的代码库将花费很多时间进行捆绑,因为Browserify会重建每个文件,即使最新修改中只有一个文件发生了更改。

Watchify仅重建所需内容。初始构建(当您运行gulp任务时)与以前保持一致,但在每次更改时,您都会看到差异。

5578610字节 JavaScript应用程序中,初始构建需要 6.67s ,并且在文件更改时重建需要 ~400ms 。仅使用Browserify,每次更改都会有 6.67s

要开始使用,请安装NPM软件包:

npm install browserify watchify --save-dev

gulpfile.js

中导入Browserify和Watchify
var browserify = require('browserify');
var watchify = require('watchify');

初始化捆绑包(我正在使用Lodash _作为商品)。 client.js是此处的应用程序入口点:

var bundler = watchify(browserify(_.assign(watchify.args, {
  entries: ['./src/client.js'],
  debug: true
})));

bundler.on('log', gutil.log); // Output build logs to terminal using gulp-util.

然后使用Watchify创建bundle()函数:

function bundle() {
  return bundler.bundle()

    // Log errors if they happen.
    .on('error', gutil.log.bind(gutil, 'Browserify Error'))
    .pipe(source('client.js'))

    // Optional, remove if you don't need to buffer file contents.
    .pipe(buffer())

    // Optional, remove if you dont want sourcemaps.
    // Loads map from Browserify file using gulp-sourcemaps.
    .pipe(sourcemaps.init({loadMaps: true}))

    // Add transformation tasks to the pipeline here.
    .pipe(sourcemaps.write('./')) // Writes .map file.
    .pipe(size(config.size)) // Checks output file size with gulp.size.
    .pipe(gulp.dest('./build'));
}

最后,在存在依赖项更新时运行bundler:

gulp.task('scripts', bundle);
gulp.task('watch', ['scripts'], function() {
  bundler.on('update', bundle); // On any dependency update, runs the bundler.
});

运行gulp watch,您就可以开始工作了。

注意:您只应将入口点设置为捆绑器条目。 Browserify和依赖关系分支将负责其余部分,并且您不会两次构建相同的文件。

答案 1 :(得分:0)

对我来说问题是由于目录结构,看来gulp并没有很好地处理相对路径,至少在我的情况下。

我的项目设置如下:

/
    project/
        gulpfile.js
        src/
            app.js
    build/
        mybuiltfile.js

我最终将它全部移动到一个文件夹中,这解决了我的问题。