【问题标题】:require returns empty object when using browserify使用 browserify 时需要返回空对象
【发布时间】:2014-11-25 10:44:32
【问题描述】:

我有一个非常简单的模块,我将它与 Browserify 捆绑在一起。我想在浏览器和节点中都使用该捆绑包。在节点中,如果我 require 非捆绑模块,它工作得很好;但是,如果我 require 浏览器化包,require 返回一个空对象。这是复制品:

简单模块

function Foo(bar) {
    this.bar = bar;
}

module.exports = Foo;

测试脚本

var Foo = require("./foo"); // not bundled with Browserify
var Foob = require("./foob"); // bundled with Browserify

console.log("Foo =", Foo);
console.log("Foob =", Foob);

如此执行

browserify foo.js -o foob.js
node foo-test.js 

输出

Foo = function Foo(bar) {
    this.bar = bar;
}
Foob = {}

您可以看到Foo(非捆绑版本)是预期的功能,但Foob(捆绑版本)是一个悲伤而空洞的对象。

所以问题是为什么浏览器化模块不在节点中工作?

澄清:我正在使用 browserify 来捆绑我的 webapp,并在我的应用程序的 require 语句中使用它的 paths options to simplify paths 并避免相对路径地狱。但是,我正在尝试使用 tap 进行单元测试,但它似乎没有类似的配置功能。因此,在使用 tap 时尝试要求非捆绑文件会导致一切中断。

【问题讨论】:

  • 你不会 require 一个 Browserify-ied 捆绑文件
  • foob.js 与 browserify 捆绑在一起。
  • 是的,我可以看到,但您不应该将 require 与已捆绑的模块一起使用。
  • 那么就不能在node中使用browserify构建的bundle了吗?
  • 这不是 Browserify 的预期用途。 Browserify 是为模拟 Node 的 require 而构建的,但适用于浏览器环境。因此,在 Node 中使用 Browserify 将完全是倒退。

标签: javascript node.js browserify


【解决方案1】:

我找到了解决这个问题的方法。解决方案是捆绑时使用browserify的--standalone选项。这将在捆绑输出中添加必要的 module.exports 语句。

【讨论】:

  • 谢谢你。这就是我在创建 NPM 客户端库时为我解决的问题。
【解决方案2】:

你想嵌套 browserify 包。在这种情况下,请确保您的嵌套包确实定义了 module.exports

例如在 foob.js 包的主文件中,一定要返回一个可以在外部使用的函数(使用 module.exports

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 2015-10-22
    • 2016-08-10
    • 1970-01-01
    • 2016-08-03
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多