我有一个非常简单的模块,我正在与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时需要非捆绑文件会导致所有内容中断。
答案 0 :(得分:6)
我找到了解决这个问题的方法。解决方案是在捆绑时使用browserify的--standalone
选项。这将在捆绑输出中添加必要的module.exports语句。
答案 1 :(得分:0)
您希望嵌套浏览器捆绑包。在这种情况下,请确保嵌套的包实际上已定义module.exports
。
例如,在foob.js
捆绑包的主文件中,请务必返回可在外部使用的功能(使用module.exports
)