3

我在一个项目中使用 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() 调用。

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

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

4

1 回答 1

0

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

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

如果您想包含一些而不是其他基于类似的东西gulp.env,您可以尝试单独构建选项对象并将其传递给 browserify 函数。

于 2014-02-18T14:44:57.937 回答