如何防止browserify-shim要求所有垫片?

时间:2014-02-17 12:10:53

标签: javascript browserify gulp

我在项目中使用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安装了角度和其他库)

1 个答案:

答案 0 :(得分:0)

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

所以为了回答你的问题,通过填充这些库,你已经告诉browserify将它们包含为全局变量,这样它们就可以在任何地方使用,所以它们将自动包含在构建中,无论你是否{{1他们。

如果你想基于require()之类的内容包含一些而不是其他内容,你可以尝试单独构建options对象并将其传递给browserify函数。