Мне интересно, как я могу расширить модуль commonjs от другого модуля, который его требует.Как обновить модуль commonjs от требуемого кода?
Давайте предположим, что у меня есть три файла, два CommonJS модуля, как показано ниже:
мой-Примеру module.js
function MyExampleModule(){}
MyExampleModule.prototype = {
bindings: {
some: 'random',
prop: 'values'
}
}
module.exports = MyExampleModule;
другой пример,-модуль .js
var MyExampleModule = require('./my-example-module');
function AnotherExampleModule(){}
AnotherExampleModule.prototype = {
getMyExampleModuleBindings: function(){
var module = new MyExampleModule();
return module.bindings;
}
}
module.exports = AnotherExampleModule;
app.js
var MyExampleModule = require('./my-example-module');
var AnotherExampleModule = require('./another-example-module');
//modify?!?
var anotherExampleModule = new AnotherExampleModule();
console.log(anotherExampleModule.getMyExampleModuleBindings());
Так что я хочу сделать, это есть //modify?!?
быть какой-то код, который изменит оригинальный MyExampleModule
прототип, когда что-нибудь еще попытки require
MyExampleModule он будет получить модифицированную версию.
Конкретный вопрос: что мне следует заменить //modify?!?
, поэтому я выхожу из консоли с допущением, что my-example-module.js является только для чтения.
{
some: 'random',
prop: 'values',
added: 'binding'
}
первым. Это зависит от платформы, поэтому добавьте соответствующий тег (может быть nodejs, но может быть другой реализацией). Второй. В принципе, вы не можете. Но если вы настаиваете на этом, вам придется переопределить 'require', и даже ваш app.js не сделает этого, так как' // modify?!? 'Будет слишком поздно. – Amit
@Amit Я не добавлял тег платформы, как в моих целях, это было бы запущено через браузер и использоваться в браузере, но я думал, что такая же идея применима в любом месте, где вы можете использовать commonjs (и полагали, что браузер не имеет значения здесь поэтому не отметили его). – Hailwood
Просто чтобы объяснить мое утверждение о '// modify?!?' Слишком поздно, в вашем случае это может быть не слишком поздно, но общий подход будет, так как 'require()' должен выполнять код внутри модуля синхронно. Если этот код зависит от модификации, то уже слишком поздно. Вы должны использовать [DI] (https://en.wikipedia.org/wiki/Dependency_injection) для достижения своей задачи. – Amit