如何在 node.js 中要求文件夹中的所有文件?
需要类似的东西:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
如何在 node.js 中要求文件夹中的所有文件?
需要类似的东西:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
当 require 指定文件夹的路径时,它会在该文件夹中查找 index.js 文件;如果有,它会使用它,如果没有,它就会失败。
创建一个 index.js 文件,然后分配所有“module”,然后简单地要求它可能是最有意义的(如果您可以控制文件夹)。
你的文件.js
var routes = require("./routes");
索引.js
exports.something = require("./routes/something.js");
exports.others = require("./routes/others.js");
如果您不知道文件名,您应该编写某种加载程序。
加载器的工作示例:
var normalizedPath = require("path").join(__dirname, "routes");
require("fs").readdirSync(normalizedPath).forEach(function(file) {
require("./routes/" + file);
});
// Continue application logic here
我建议使用glob来完成该任务。
var glob = require( 'glob' )
, path = require( 'path' );
glob.sync( './routes/**/*.js' ).forEach( function( file ) {
require( path.resolve( file ) );
});
基于@tbranyen 的解决方案,我创建了一个index.js
文件,该文件在当前文件夹下加载任意 javascripts 作为exports
.
// Load `*.js` under current directory as properties
// i.e., `User.js` will become `exports['User']` or `exports.User`
require('fs').readdirSync(__dirname + '/').forEach(function(file) {
if (file.match(/\.js$/) !== null && file !== 'index.js') {
var name = file.replace('.js', '');
exports[name] = require('./' + file);
}
});
然后您可以require
从其他任何地方访问该目录。
另一种选择是使用require-dir包,它可以让您执行以下操作。它也支持递归。
var requireDir = require('require-dir');
var dir = requireDir('./path/to/dir');
我有一个文件夹 /fields 充满文件,每个文件都有一个类,例如:
fields/Text.js -> Test class
fields/Checkbox.js -> Checkbox class
将其放入 fields/index.js 以导出每个类:
var collectExports, fs, path,
__hasProp = {}.hasOwnProperty;
fs = require('fs');
path = require('path');
collectExports = function(file) {
var func, include, _results;
if (path.extname(file) === '.js' && file !== 'index.js') {
include = require('./' + file);
_results = [];
for (func in include) {
if (!__hasProp.call(include, func)) continue;
_results.push(exports[func] = include[func]);
}
return _results;
}
};
fs.readdirSync('./fields/').forEach(collectExports);
这使得module的行为更像它们在 Python 中的表现:
var text = new Fields.Text()
var checkbox = new Fields.Checkbox()