我正面临着运行最新浏览器(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.
答案 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。它不适用于您的解决方案。
解决方案:让您的父组件处理所有“单身人士”(配置对象)。