2015-06-29 8 views
2

У меня возникла странная проблема с последней версией браузера (10.2.4) и gulp. Кажется, что один и тот же файл разрешается несколько раз, поэтому я не получаю тот же экземпляр при создании синглета. Я поставил «отладчик» перед module.exports и проверил, что он вызывается дважды.Browserify разрешает один и тот же файл несколько раз

примечание № 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. 

ответ

3

Вы должны изменить архитектуру так:

/folder1/foo.js:

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

/folder2/бар .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()); 

У меня была такая же проблема, и я узнал, что это просто impractible архитектурный стиль.

EDIT: Таким образом, у вас есть «singleton», который управляется главным компонентом/классом (app.js).

Например,: Представьте, что у вас есть подкомпонент/подкласс, которому нужен объект config. -> App.js использует SubComponent.js.

Ваш путь: require 'config' (реализован как singleton) и использовать его для компонента.

Задача: Теперь вы хотите добавить другой субкомпонент того же типа, который также нуждается в другом объекте config. Это не сработает с вашим решением.

Решение: Пусть ваш родительский компонент обрабатывает все «одиночные» (объекты конфигурации).

+1

Но это означает, что я вообще не могу использовать синглтоны, поэтому это не решение –

Смежные вопросы