如何在nodeJS中包含所有文件,如
require('./packages/city/model/cities')
require('./packages/state/model/states')
require('./packages/country/model/countries')
喜欢
require('./packages/*/model/*')
就像grunt正在加载文件一样。
答案 0 :(得分:4)
你不能(或者至少你不应该)
为了做到这一点,你必须重载节点的本地require
函数,这是非常不可取的。
CommonJS模式对你来说可能看起来很乏味,但它是一个非常好的模式,你不应该因为你看到其他语言/框架中的快捷方式而试图打破它。
通过在模块中引入某种形式的魔法,你会突然改变程序员可以(并且应该能够)安全地假设CommonJS模式本身的所有内容。
答案 1 :(得分:2)
由于节点模块加载系统中的一对一对应,本机不可能,但如果有这种方法的包,也不会感到惊讶。
您可以做的最好的事情是创建一个index.js,它可以加载目录中的模块,并将它们作为自己的模块导出。
module.exports = function() {
return {
city : require('./city/model/'),
state : require('./packages/state/model/'),
country : require('./packages/country/model/')
}
}
你也必须在所有三个dirrectories中以类似的方式加载模型。
我知道这个解决方案不是您想要的,但在我的实验中,这种方法可以更好地管理自定义包,因为您可以轻松添加/删除功能。
答案 2 :(得分:1)
Node.js的require
允许你
一次只加载一个模块
仅以同步方式加载模块。
这就是模块系统在Node.js中的工作方式。但是如果你想拥有minimatch类型的匹配功能,你可以自己滚动一个,比如这个
var path = require("path"),
glob = require("glob");
function requirer(pattern) {
var modules = {},
files = glob.sync(pattern);
files.forEach(function(currentFile) {
var fileName = path.basename(currentFile);
fileName = fileName.substring(0, fileName.lastIndexOf(".js"));
modules[fileName] = require(currentFile);
});
return modules;
}
这取决于glob
模块,它允许您使用迷你匹配模式搜索文件,然后我们需要找到的文件,将它们存储在一个对象中并返回该对象。这可以像这样使用
var modules = requirer('./packages/*/model/*.js');
console.log(modules.cities);
P.S:我正在努力使其成为public module。