我在项目中使用browserify和browserify-shim,使用gulp-browserify运行gulp。
gulp.src(['./resources/js/main.js'])
.pipe(browserify({
shim: {
angular: {
path: './node_modules/angular/angular.js',
exports: 'angular'
},
'angular-animate': {
path: './node_modules/angular-animate/angular-animate.js',
exports: 'ngAnimate',
depends: {
angular: 'angular',
jQuery: 'jQuery'
}
},
[...]
}
}))
.pipe(concat('app.js'))
.pipe(gulp.dest('./web/js'));
此设置工作正常,对于大多数部件,按预期工作。但是,Browserify将始终在构建中包含所有填充库,即使require()调用了 none 。
该主题的文档似乎不存在。有办法防止这种情况吗?这对我来说似乎非常违反 - 构建应该只包含我实际需要的内容。
(更新:我使用napa / npm安装了角度和其他库)
答案 0 :(得分:0)
当您使用Browserify进行填充时,它会使这些库(特别是您告诉它的对象“导出”)全局化。惯例仍然是对这些库使用require()
,但这样做只是最佳实践,因此如果要将库转换为module.exports
,那么您将无需替换全局代码中的引用。另外,以良好的节点形式列出顶部所需的所有文件更好。 :)
所以为了回答你的问题,通过填充这些库,你已经告诉browserify将它们包含为全局变量,这样它们就可以在任何地方使用,所以它们将自动包含在构建中,无论你是否{{1他们。
如果你想基于require()
之类的内容包含一些而不是其他内容,你可以尝试单独构建options对象并将其传递给browserify函数。