【问题标题】:Browserify hides modules when names conflict with builtins当名称与内置函数冲突时,Browserify 隐藏模块
【发布时间】:2014-09-30 09:27:55
【问题描述】:

我有一个名为 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 指定为[](我也尝试过{})会覆盖此行为,但它似乎只在生成的代码中将模块解析为undefined

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

问题:

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

【问题讨论】:

    标签: gulp browserify


    【解决方案1】:

    我发现唯一可行的方法是手动排除与您发生冲突的内置函数。

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2011-07-17
    • 2020-06-18
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多