require使用browserify时返回空对象

Jus*_*son 2 javascript node.js browserify

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

简单的模块

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

module.exports = Foo;
Run Code Online (Sandbox Code Playgroud)

测试脚本

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

console.log("Foo =", Foo);
console.log("Foob =", Foob);
Run Code Online (Sandbox Code Playgroud)

这样执行

browserify foo.js -o foob.js
node foo-test.js 
Run Code Online (Sandbox Code Playgroud)

产量

Foo = function Foo(bar) {
    this.bar = bar;
}
Foob = {}
Run Code Online (Sandbox Code Playgroud)

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

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

澄清: 我正在使用browserify捆绑我的webapp并使用其路径选项来简化应用程序的require语句中的路径并避免相对路径地狱.但是,我正在尝试使用tap进行单元测试,但它似乎没有类似的配置功能.因此,尝试在使用tap时需要非捆绑文件会导致所有内容中断.

Jus*_*son 6

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