Хорошо, фактическая конечная причина этого состоит в том, чтобы иметь папку с хорошо упорядоченными модулями (в данном случае функциями). Структура папки должна быть примерно такой:
- /app.js
- /node_modules/
- /mainfunction.js
- /functions/
- /func1.js
- /func2.js
- /func3.js
- /func4.js
- /...
mainfunction.js:
exports.func1 = require("./functions/func1");
exports.func2 = require("./functions/func2");
exports.func3 = require("./functions/func3");
exports.func4 = require("./functions/func4");
Итак, из app.js или любой другой части приложения я могу использовать эти функции, просто реализуя mainfunction.js следующим образом:
var f = require("mainfunction"); //And also require the others cores module 'path, fs,..."
//then you can call the module directly.
f.func1(input)
//Or store it in a variable
var area = (new) f.func3(width) //sometimes **new** is needed when there is no input.
Эта информация доступна в API Node.js.
Проблемы начинаются сейчас.
Некоторые модули требуют, чтобы другие работали, есть много взаимосвязей, подобных этим примерам:
- Func2 требует ответа Func1
- Func3 требует ответа Func2, а помимо него Func1 (поэтому Func1 требуется дважды)
- Для Func4 требуется основной модуль (fs, path, ...) и другие функции.
Нужно ли повторно объявлять все переменные, которые нужны каждой функции (независимым модулям)?
пример Func5.js:
var answer;
var func2 = require("./func2"); //redeclare modules needed
var fs = require("fs"); //redeclare core modules needed
module.exports = function(input) { //do some stuff
fs.exist("x.html", function (exist) {
if(exist){
answer = func2(input);
}
}
return answer;
}
Я не хочу повторно объявлять модуль необходимым, я просто хочу использовать «f.funcX (ввод)», чтобы использовать функцию в любой области, даже внутри модуля. Это возможно?
Любое предложение хорошо принимается. Спасибо.
Еще один предполагаемый вариант (отредактировано)
Хорошо, автономные модули выигрывают, но как насчет этого? (я даже не знаю, работает ли это).
Та же структура папок и файлов. Но mainfunction.js имеет:
module.exports = {
require("./functions/func1"),
require("./functions/func2"),
require("./functions/func3"),
require("./functions/func4"),
...
}
И каждый файл функции имеет то же самое, но без переобъявленных модулей, вместо этого имеет «exports.functX», и для вызова других модулей используется имя этой функции (модуля).
Это может не сработать, это просто идея.
require
все, что нужно модулю. Это делает модуль автономным и упрощает его рассмотрение. Представьте, что вы проектируете модуль А так, чтобы он зависел от глобальной переменнойfoo
. Каждый модуль, которому требуется A, теперь должен гарантировать, чтоfoo
существует в глобальной области видимости, т. е. ему нужны знания о внутренностях A. Не беспокойтесь о том, что модули требуются несколько раз, они все равно оцениваются только один раз. - person Felix Kling   schedule 16.07.2014