目前我已经定义了必需文件,如下所示。
myApp.controller('myController', function($routeParams, $scope, $http, API_URL){
......
});
注意到所有路径都是相同的路径,而require变量与文件名相似 我不想重复这个程序x次,因为它违反了DRY原则 是否可以在这里使用foreach循环。例如:动态读取文件夹中的所有文件并使用require来分配它?
答案 0 :(得分:2)
类似于BradyCartmell的答案,但有点整洁;
var fs = require('fs');
var constantPath = './config/file/';
var files = { };
fs.readdir(constantPath, function(err, modules) {
if (err) {
throw err;
}
modules
.filter(function (module) {
return module.slice(module.length - 3) === '.js';
})
.forEach(function (module) {
files[module] = require(constantPath + module);
});
});
注意到差异;
require
注意:请注意这是异步的,因此请妥善编写其余代码(即从fs.readdir
回调中触发它。
为了完整性,如果你想要同步版本以避免烦恼;
var fs = require('fs');
var constantPath = './config/file/';
var files = { };
fs.readdirSync(constantPath)
.filter(function (module) {
return module.slice(module.length - 3) === '.js';
})
.forEach(function (module) {
files[module] = require(constantPath + module);
});
答案 1 :(得分:2)
如果该文件夹的每个文件都需要作为脚本,您可能需要明确要求所有文件的内容。
节点模块require-all可以使用。
<强>的NodeJS:强>
require('require-all')(__dirname + '/config/file/');
您还可以使用模块require-dir。
<强>的NodeJS:强>
require('require-dir')('./config/file');
希望这有帮助。
答案 2 :(得分:0)
const fs = require('fs');
var modsDir = './mods/dir';
fs.readdir(modsDir, (err, fileNames) => {
if (err) throw err;
fileNames.forEach((fileName) => {
if (fileName.slice(fileName.length-3) === '.js') {
fileName = fileName.slice(0, fileName.length-3);
// This feels dirty
global[fileName] = require(modsDir+fileName);
}
});
});
应该封装以隔离modsDir,但无论如何这都显示了它的要点。