好吧,实际的最终原因是要有一个文件夹,模块(在这种情况下,功能)。 Folder结构应该是这样的:
mainfunction.js:
exports.func1 = require("./functions/func1");
exports.func2 = require("./functions/func2");
exports.func3 = require("./functions/func3");
exports.func4 = require("./functions/func4");
所以,从app.js或app的任何其他部分我可以使用这些函数来实现这样的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.
此信息可在Node.js API中找到。
问题现在就开始了。
有些模块要求其他人工作,有许多关系,例如:
我是否必须重新声明每个功能(独立模块)需要的所有变量?
示例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"),
...
}
每个Function文件都有相同但没有重新声明的模块,而是使用“exports.functX”,并调用其他模块,使用该函数的名称(模块)。
这可能不起作用,这只是一个想法。
答案 0 :(得分:2)
Func3需要Func2响应并且需要它的一部分Func1(所以Func1需要两次)
事实证明,在这种情况下,Node的模块加载系统不需要两次Func1。该过程将cache Func1的导出,当需要第二次时,只返回Func1的原始瞬时。
我是否必须重新声明每个功能(独立模块)需要的所有变量?
你没必要,但这通常是一个好主意。这绝不是一件坏事,因为事实上,每个模块应彼此独立;如果每个模块都做了不同的事情,那么无论如何都要在项目的每个模块中都有所有功能。
然而,通用装载在技术上是可行的。一种可能的配置是将每个模块加载到全局命名空间(process
),但用Douglas Crockford的话说,“全局是邪恶的”。该模块将在Node过程中的任何位置可用,即使在与您无关的模块中也是如此。实质上,您在任何地方看到的require模式实际上是在节点中加载依赖项的最佳方式。
好的,模块自成功赢了,但是这个怎么样? (我甚至不知道这是否有效)。 [...]
我认为你的意思是这个?
module.exports = {
func1: require("./functions/func1"),
func2: require("./functions/func2"),
func3: require("./functions/func3"),
func4: require("./functions/func4"),
...
}
如果你有一个模块有很多独立的子模块可以暴露到任何需要的模式,这通常是一个很好的模式;但是,不可能使用这样的模式来允许项目级命名空间,因为Func1需要mainfunction.js需要Func1,依此类推。 (这称为循环依赖。)
简而言之,不要担心在需要模块时会重复。最后,标准模式不重复,因为每个模块将具有不同的要求和依赖关系,也不会让模块运行多次,如上所述。
祝你的Node.js努力!