我正在使用browserify创建一个需要大量库(如jquery和three.js)的文件。编译过程需要几秒钟,可能是因为每次进行小改动时都在重新编译所有库。有没有办法加快编译速度?
我正在使用browserify创建一个需要大量库(如jquery和three.js)的文件。编译过程需要几秒钟,可能是因为每次进行小改动时都在重新编译所有库。有没有办法加快编译速度?
你尝试过使用 --insert-globals
, --ig
, 或者 --fast
标志吗?(它们其实都是同一个东西)
之所以很慢可能是因为它正在扫描整个jquery和d3,寻找__dirname
、__filename
、process
和global
的引用。
编辑:
我刚想起来: Browserify 将采用任何现有的 require 函数,如果找不到就会回退使用它。 在这里了解更多信息
这意味着你可以为静态库构建一个 bundle,然后仅在更改时重新构建应用程序代码的 bundle。
结合我的修改前的回答,这将使它快得多。
有几个选项可以帮助:
--noparse=FILE
对于像jQuery和three.js这样的庞大库,但根本不使用require
的库来说是必须的。
--detect-globals
如果您的模块不使用任何node.js全局变量,请将其设置为false。指示browserify不解析文件以查找process
、global
、__filename
和__dirname
。
--insert-globals
如果您的模块使用了node.js全局变量,则将其设置为true。这将定义这些全局变量,而无需解析模块并检查是否使用了它们。
我通过将ThreeJS外部化、使用noparse
和将其设置为不创建源映射来加速构建。
在开发时,请使用https://github.com/substack/watchify。
--noparse
的示例? - CarpetfizzignoreGlobals
,detectGlobals=false
甚至noParse
ing jQuery的构建仍需> 3秒)。gutil = require("gulp-util")
source = require("vinyl-source-stream")
watchify = require("watchify")
browserify = require("browserify")
coffeeify = require("coffeeify")
gulp.task "watchify", ->
args = watchify.args
args.extensions = ['.coffee']
bundler = watchify(browserify("./coffee/app.coffee", args), args)
bundler.transform(coffeeify)
rebundle = ->
gutil.log gutil.colors.green 'rebundling...'
bundler.bundle()
# log errors if they happen
.on "error", gutil.log.bind(gutil, "Browserify Error")
# I'm not really sure what this line is all about?
.pipe source("app.js")
.pipe gulp.dest("js")
.pipe livereload()
gutil.log gutil.colors.green 'rebundled.'
bundler.on "update", rebundle
rebundle()
gulp.task "default", ["watchify", "serve"]
编辑:这里有一个JS翻译:
var gutil = require("gulp-util")
var source = require("vinyl-source-stream")
var watchify = require("watchify")
var browserify = require("browserify")
var coffeeify = require("coffeeify")
gulp.task("watchify", function() {
var args = watchify.args
args.extensions = ['.coffee']
var bundler = watchify(browserify("./coffee/app.coffee", args), args)
bundler.transform(coffeeify)
function rebundle() {
gutil.log(gutil.colors.green('rebundling...'))
bundler.bundle()
// log errors if they happen
.on("error", gutil.log.bind(gutil, "Browserify Error"))
// I'm not really sure what this line is all about?
.pipe(source("app.js"))
.pipe(gulp.dest("js"))
.pipe(livereload())
gutil.log(gutil.colors.green('rebundled.'))
}
bundler.on("update", rebundle)
rebundle()
})
gulp.task("default", ["watchify", "serve"])
ParseError: 保留字 "var"
- hackeronejavascript
标签。 - mikemaccana更新
您还可以尝试使用Persistify,它可以作为命令行和代码的 watchify 替代品。
以下是原始答案:
=======
我目前正在使用 Bundly:
https://www.npmjs.com/package/bundly
完全透明:我写了这个包装器
但这个封装器的主要区别在于它提供了增量构建。它在运行之间保持 browserify 缓存并仅解析已更改的文件,而无需使用 watch 模式。
当前该模块做得更多,不仅添加缓存,但我想处理增量构建部分的逻辑可以移动到插件中,这样它就可以与 browserify 直接一起使用。