Javascript 如何防止browserify垫片需要所有垫片?

Javascript 如何防止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

我在一个项目中使用browserify和browserify垫片,使用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()没有调用它们

关于这个主题的文档似乎不存在。有没有办法防止这种情况?这对我来说似乎非常违反直觉-构建应该只包含我实际需要的内容


(更新:我使用napa/npm安装了angular和其他LIB)

当您使用Browserify填充时,它会使这些库(特别是您告诉它“导出”的对象)成为全局库。惯例是仍然对这些库使用
require()
,但是,这样做只是最佳实践,这样,如果库要转换为
module.exports
,您就不必替换代码中的全局引用。另外,最好将您需要的所有文件以良好的节点形式列在顶部。:)

因此,为了回答您的问题,通过填充这些库,您已经告诉browserify将它们作为全局变量包含,以便它们可以在任何地方使用,因此它们将自动包含在构建中,而不管您是否
require()
它们

如果您想基于像
gulp.env
这样的内容包含一些而不是其他,您可以尝试单独构建options对象并将其传递到browserify函数中