require使用browserify时返回空对象

时间:2014-11-25 10:44:33

标签: javascript node.js browserify

我有一个非常简单的模块,我正在与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捆绑我的网络应用程序,并在我的应用程序的require语句中使用paths options to simplify paths并避免相对路径地狱。但是,我尝试使用tap进行单元测试,但它似乎没有类似的配置功能。因此,尝试在使用tap时需要非捆绑文件会导致所有内容中断。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

您希望嵌套浏览器捆绑包。在这种情况下,请确保嵌套的包实际上已定义module.exports

例如,在foob.js捆绑包的主文件中,请务必返回可在外部使用的功能(使用module.exports

相关问题