【问题标题】:gulp browserify bundle time takes too longgulp browserify 捆绑时间太长
【发布时间】:2015-10-12 05:16:19
【问题描述】:

我遇到了一个奇怪的问题,需要你的帮助来弄清楚发生了什么。

我已经配置 gulp 来构建我在 ES6 中用 React.js 编写的测试。我使用browserify 设置CommonJS env 和babelify 以获得更大的ES6 支持。一切正常,如果需要 React 作为 CommonJS 模块,则构建时间太长(在我看来)。意思是这个

import React from 'react';

line 将在初始构建时将包/编译时间从 1.2secs 提高到 4secs 左右,然后当检测到任何更改时,大约需要 2.5secs 来重建 js 文件。当包含更多模块时,这个时间会迅速增加。我的解决方法是配置 bower 以在浏览器中将任何外部库公开为全局变量,不太喜欢这种解决方案。

这是我的主要browserify 设置:

function buildApp () {
  return browserify({
    entries: config.paths.jsx,
    extensions: ['.jsx'],
    debug: true
  })
  .bundle()
  .on('error', onError)
  .pipe(source('app.js'))
  .pipe(gulp.dest(config.paths.dest));
}

并通过packages.json添加转换

"browserify": {
  "transform": [
    "babelify"
  ]
}

我确实在我的 buildApp function 中尝试了 ignore 选项,如下所示:

transform(babelify.configure({
  ignore: /node_modules/
})

但这并没有帮助。

据我所知,我正在使用最新的软件包,意思是:

"babelify": "^6.3.0",
"browserify": "^11.2.0",
"react": "^0.14.0"

在节点 v4.1.0 上。有人有什么想法吗?无论如何,请分享。

附: Here 是指向 repo 的链接,如果有人有时间想仔细看看的话。或者,也许,测试构建时间。

【问题讨论】:

    标签: reactjs gulp browserify


    【解决方案1】:

    这是因为 React 需要一些东西,这意味着您的 browserify 必须遍历更多节点。

    您可能能够改进这一点的一种方法是预先捆绑 React。但是,这只会改进 React 库,添加另一个库,它会再次变慢。

    您可以用来改进重新捆绑的一件事是将 watchify 添加到您的 browserify 捆绑过程中。

    试试这个

    var watchify = require('watchify');
    var babelify = require('babelify');
    
    var bundler;
    
    function buildApp () {
      bundler = bundler || watchify(browserify({
        entries: config.paths.jsx,
        extensions: ['.jsx'],
        debug: true,
        transform: [babelify], //This will allow you to use babel for jsx/es6
        cache: {}, // required for watchify
        packageCache: {}, // required for watchify
        fullPaths: true //You can change this false in production
      }))
    
      return bundler
      .bundle()
      .on('error', onError)
      .pipe(source('app.js'))
      .pipe(gulp.dest(config.paths.dest));
    }   
    

    基本上你需要做的是将你的 browserify 包装在 watchify 中并添加一些额外的属性(缓存、packageCache、fullPaths)

    Watchify 将通过缓存捆绑的文件来加快您的重新捆绑过程。

    !重要提示

    记得在生产中删除 watchify,除非你的构建过程会挂起,因为它正在监视你的文件。

    【讨论】:

    • 我已经添加了 watchify 以及所需的选项,但没有用,重新捆绑过程保持不变。
    • 你添加了缓存、packageCache和fullPaths吗?
    • 确实有,传递给browserify的选项对象。
    • Opps,修改了一下,试试这个
    • @Nazariy 这不是关于第一次编译顺便说一句,而是关于后续编译,即当您更改文件并为您重新编译时。因此,拥有 cache/packageCache 变量允许您缓存捆绑的代码,以便我们可以更快地重新编译更改。我们无法逃避第一次编译 afaik 所花费的长时间。
    【解决方案2】:

    请查看我的回购https://github.com/skrobek/react-gulp-browserify。我使用的是完全相同的技术栈:gulp、browserify、react。

    【讨论】:

    • 我查看了您的配置,据我所知,不同之处在于您连接了update 事件,尝试过,但对我没有多大帮助
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多