为什么browserify在lib中拉2次? - Browserify

时间:2014-07-22 18:02:21

标签: browserify

我有一个Angular应用,我使用browserify来管理我的依赖项。我也在使用momentjs来操作所有时间。我有几个模块,我使用browserify来构建,但即使我使用momentjs命令,它也不止一次地引入external。这是我的代码。首先,我有一个包含所有共享库的基本模块:

require('angular');
require('angular-route');
require('moment');

以下是我在browserify中使用gulpfile.js的代码:

browserify().require('./js/donor/donor-libs.js')
    .bundle()
    .pipe(source('donor-libs.js'))
    .pipe(gulp.dest('./build'));

这构建得很好,并且包含我期望的包含momentjs的库。

现在我去构建一个依赖于这个模块的模块。本模块中使用momentjs。这是我用来构建模块的代码:

    browserify().require('./js/donor/history-module.js')
        .external('./js/donor/donor-libs.js')
        .bundle()
        .pipe(source(filename))
        .pipe(gulp.dest('./build'));

现在,当我查看build目录时,momentjsdonor-libs.js都有history-module.js。为什么我没有在momentjs donor-libs.js中认出我已经需要external?我需要做什么才能一次只需要第三方库?关于{{1}}命令,我不明白什么?

1 个答案:

答案 0 :(得分:0)

多次提取lib的原因是external命令被不正确地使用。 external期待external化的路径或路径数组。 external不会查看js文件并找到require d文件,然后不将其拉入其他模块。代码应该看起来像这样

.external('angular', 'angular-route', 'moment')

require d lib的路径。这会外化这些文件并修复了多次拉出lib的问题。