当名称与builtins冲突时,Browserify会隐藏模块

时间:2014-09-30 09:27:55

标签: gulp browserify

我有一个名为constants的模块。 Browserify无法捆绑此模块,因为其名称与lib/builtins中定义的内置模块冲突:

exports.constants = require.resolve('constants-browserify');

可以在生成的代码中观察到此效果。例如,依赖constants的模块显示:

{
  //...
  12:[
    function(require,module,exports){...},
    {"util":6,"constants":2}
  ]

我们看到模块12依赖于模块2(constants的索引)。索引为2的模块的定义是:

2:[
  function(require,module,exports){
    module.exports={
      "O_RDONLY": 0,
      "O_WRONLY": 1,
      "O_RDWR": 2
      // ...
    }
  },
  {}
]

这些O_*常量在constants-browserify中定义,而不在我的constants模块中定义。

我在Gulp中使用NPM包并指定以下options

return browserify('./main.js', {
        basedir: './scripts/app/',
        paths: ['./scripts/app/'],
        builtins: []
    })
    .bundle()
    .pipe(source('main.js'))
    .pipe(gulp.dest('dist'));

我希望将builtins指定为[](我也试过{})会覆盖此行为,但似乎只将模块解析为{{1}在生成的代码中:

undefined

问题:

  • 主要:有没有办法告诉browserify不要尝试更换我的模块?
  • 为什么browserify想要指定这些内置插件?我不知道他们是如何需要的。

1 个答案:

答案 0 :(得分:0)

我发现的唯一方法是手动排除与您发生碰撞的内置组件。

假设您与constantsnull发生冲突,您可以使用:

browserify('./main.js', {
    builtins: {constants:null, util:null}
});