Browserify多次解析同一文件

时间:2015-06-29 09:03:26

标签: javascript node.js gulp browserify

我正面临着运行最新浏览器(10.2.4)和gulp的奇怪问题。 似乎同一个文件被多次解析,因此在创建单例时我不会获得相同的实例。 我已经放了一个调试器'在module.exports之前,验证它被调用两次。

注意#1:我猜测浏览器会根据字符串缓存文件,因此当从不同位置调用相对路径时,即使它们指向同一个地方,也不会有相同的字符串。

注意#2:到目前为止,我一直在使用Browserify 3,只有当我升级它时才开始发生。

示例:

假设:

app.js
/folder1/foo.js
/folder2/bar.js

/folder1/foo.js:

function Foo(){}
module.exports = new Foo(); // Creating a singleton

/folder2/bar.js

var foo = require('../folder1/foo');
function Bar(){
// do something with foo
}
module.exports = Bar;

/app.js

var foo = require('./folder1/foo'),
Bar = require('./folder2/bar');
var bar = new Bar();
// Now 'foo' here and 'foo' inside Bar are not the same instance.

1 个答案:

答案 0 :(得分:3)

您应该像这样更改您的架构:

<强> /folder1/foo.js:

function Foo(){}
module.exports = Foo;

<强> /folder2/bar.js

function Bar(foo){
// do something with foo
}
module.exports = Bar;

<强> /app.js

var Foo = require('./folder1/foo'),
var Bar = require('./folder2/bar');
var bar = new Bar(new Foo());

我遇到了同样的问题,我发现它只是一种不可改变的建筑风格。

编辑:这样,你有一个“单身”,它只是由主要组件/类(app.js)管理。

例如:想象一下,你有一个需要config对象的子组件/子类。 - &GT; App.js使用SubComponent.js。

您的方式require'config'(以单例形式实现)并将其用于组件。

问题:现在您要添加另一个也需要其他config对象的相同类型的SubComponent。它不适用于您的解决方案。

解决方案:让您的父组件处理所有“单身人士”(配置对象)。