gulp browserify 捆绑时间太长
gulp browserify bundle time takes too long
我 运行 遇到了一个 st运行ge 问题,需要你的帮助来弄清楚发生了什么。
我已经配置 gulp 来构建我在 ES6 中用 React.js 编写的测试。我使用 browserify
来设置 CommonJS env 和 babelify
以获得更大的 ES6 支持。一切正常,如果需要 React 作为 CommonJS 模块,则构建时间太长(在我看来)。意思是这个
import React from 'react';
行将在初始构建时将 bundle/compile 时间从 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));
}
并且 t运行s 表单是通过 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。有人有什么想法吗?无论如何,请分享。
P.S。
Here 是回购的 link 如果有人有时间想仔细看看。或者,也许,测试构建时间。
这是因为 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,除非你的构建过程会挂起,因为它正在监视你的文件。
请查看我的回购 https://github.com/skrobek/react-gulp-browserify。我使用的是完全相同的技术堆栈:gulp、browserify、react。
我 运行 遇到了一个 st运行ge 问题,需要你的帮助来弄清楚发生了什么。
我已经配置 gulp 来构建我在 ES6 中用 React.js 编写的测试。我使用 browserify
来设置 CommonJS env 和 babelify
以获得更大的 ES6 支持。一切正常,如果需要 React 作为 CommonJS 模块,则构建时间太长(在我看来)。意思是这个
import React from 'react';
行将在初始构建时将 bundle/compile 时间从 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));
}
并且 t运行s 表单是通过 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。有人有什么想法吗?无论如何,请分享。
P.S。 Here 是回购的 link 如果有人有时间想仔细看看。或者,也许,测试构建时间。
这是因为 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,除非你的构建过程会挂起,因为它正在监视你的文件。
请查看我的回购 https://github.com/skrobek/react-gulp-browserify。我使用的是完全相同的技术堆栈:gulp、browserify、react。