gulp browserify 捆绑时间太长

2024-03-31

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

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

import React from 'react';

行将提高捆绑/编译时间1.2secs到周围4secs在初始构建中,当检测到任何更改时,它会花费大约2.5secs重建js文件。当包含更多模块时,这个时间会迅速增加。我的解决方法是配置bower将任何外部库公开为浏览器中的全局变量,不太喜欢这个解决方案。

这是我的主要browserify setup:

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"
  ]
}

我确实尝试过ignore我的选项buildApp function如下:

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

但这没有帮助。

据我所知,我正在使用最新的软件包,这意味着:

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

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

P.S. Here https://github.com/radical-edo/react-todos如果有人有时间并想仔细查看,则可以找到该存储库的链接。或者,也许,测试构建时间。


这是因为 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 中并添加一些额外的属性(cache、packageCache、fullPaths)

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

!重要的提示

请记住在生产中删除 watchify,除非您的构建过程将挂起,因为它正在监视您的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gulp browserify 捆绑时间太长 的相关文章

随机推荐