我怎样才能要求path模式的模块?

我怎么能包括像nodeJS中的所有文件

require('./packages/city/model/cities') require('./packages/state/model/states') require('./packages/country/model/countries') 

 require('./packages/*/model/*') 

像grunt一样正在加载文件。

你不能(至less你不应该)

为了做到这一点,你将不得不重载节点的本地requirefunction,这是非常不可取的。

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允许你

  1. 一次只加载一个模块

  2. 仅以同步方式加载模块。

这就是模块系统在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:我正在努力使这个公共模块已经。