我怎样才能要求path模式的模块?
我怎么能包括像nodeJS中的所有文件
require('./packages/city/model/cities') require('./packages/state/model/states') require('./packages/country/model/countries')
像
require('./packages/*/model/*')
像grunt一样正在加载文件。
你不能(至less你不应该)
为了做到这一点,你将不得不重载节点的本地require
function,这是非常不可取的。
CommonJS模式对你来说可能看起来很乏味,但它是一个很好的模式,你不应该因为你在其他语言/框架中看到快捷方式而试图打破它。
通过在你的模块中引入某种forms的魔法,你突然改变了程序员能够(应该能够)安全地假设CommonJS模式本身的一切。
由于节点模块加载系统中的一一对应,本地不可能,但是如果有这种方法的包,则不会感到惊讶。
最好你可以做的是创build一个index.js加载目录中的模块,并将其导出为自己的。
module.exports = function() { return { city : require('./city/model/'), state : require('./packages/state/model/'), country : require('./packages/country/model/') } }
你将不得不在所有三个方向上以相似的方式加载模型。
我知道这个解决scheme不是你正在寻找的,但在我的实验中,这种方法可以更好地pipe理自定义包,因为你可以轻松地添加/删除function。
Node.js的require
允许你
-
一次只加载一个模块
-
仅以同步方式加载模块。
这就是模块系统在Node.js中的工作方式 但是,如果你想有一个匹配function的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
模块,它允许您使用minimatch模式来search文件,然后我们需要find的文件,将它们存储在一个对象中并返回该对象。 这可以像这样使用
var modules = requirer('./packages/*/model/*.js'); console.log(modules.cities);
PS:我正在努力使这个公共模块已经。