Javascript 如何防止browserify垫片需要所有垫片?
我在一个项目中使用browserify和browserify垫片,使用gulp browserify运行gulpJavascript 如何防止browserify垫片需要所有垫片?,javascript,browserify,gulp,Javascript,Browserify,Gulp,我在一个项目中使用browserify和browserify垫片,使用gulp browserify运行gulp gulp.src(['./resources/js/main.js']) .pipe(browserify({ shim: { angular: { path: './node_modules/angular/angular.js', exports: 'angul
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()没有调用它们
关于这个主题的文档似乎不存在。有没有办法防止这种情况?这对我来说似乎非常违反直觉-构建应该只包含我实际需要的内容
(更新:我使用napa/npm安装了angular和其他LIB)当您使用Browserify填充时,它会使这些库(特别是您告诉它“导出”的对象)成为全局库。惯例是仍然对这些库使用
require()
,但是,这样做只是最佳实践,这样,如果库要转换为module.exports
,您就不必替换代码中的全局引用。另外,最好将您需要的所有文件以良好的节点形式列在顶部。:)
因此,为了回答您的问题,通过填充这些库,您已经告诉browserify将它们作为全局变量包含,以便它们可以在任何地方使用,因此它们将自动包含在构建中,而不管您是否require()
它们
如果您想基于像gulp.env
这样的内容包含一些而不是其他,您可以尝试单独构建options对象并将其传递到browserify函数中