【发布时间】: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