使用ES6,我可以像这样从文件中导入几个导出:
import {ThingA, ThingB, ThingC} from 'lib/things';
但是,我喜欢每个文件有一个模块的组织方式。我最终得到了这样的导入:
import ThingA from 'lib/things/ThingA';
import ThingB from 'lib/things/ThingB';
import ThingC from 'lib/things/ThingC';
我希望能够做到这一点:
import {ThingA, ThingB, ThingC} from 'lib/things/*';
或者类似的东西,按照大家理解的约定,每个文件包含一个默认导出,每个模块与其文件同名。
这可能吗?
你也可以使用require:
const moduleHolder = []
function loadModules(path) {
let stat = fs.lstatSync(path)
if (stat.isDirectory()) {
// we have a directory: do a tree walk
const files = fs.readdirSync(path)
let f,
l = files.length
for (var i = 0; i < l; i++) {
f = pathModule.join(path, files[i])
loadModules(f)
}
} else {
// we have a file: load it
var controller = require(path)
moduleHolder.push(controller)
}
}
然后使用动态加载控制器的moduleHolder:
loadModules(DIR)
for (const controller of moduleHolder) {
controller(app, db)
}
类似于公认的答案,但它允许你在每次创建索引文件时不需要添加一个新模块的情况下进行扩展:
/模块/ moduleA.js
export const example = 'example';
export const anotherExample = 'anotherExample';
/模块/ index.js
// require all modules on the path and with the pattern defined
const req = require.context('./', true, /.js$/);
const modules = req.keys().map(req);
// export all modules
module.exports = modules;
。/ example.js
import { example, anotherExample } from './modules'
Nodejs吗?这样做:
用index.js创建一个文件夹,在索引文件中添加以下内容:
var GET = require('./GET');
var IS = require('./IS');
var PARSE = require('./PARSE');
module.exports = { ...GET, ...IS, ...PARSE};
并且,在GET.js或IS.js文件中正常导出:
module.exports = { /* something as you like */}
现在,你只需要像这样包含index.js:
const Helper = require('./YourFolder');
Helper将包括你文件夹中的所有功能。
美好的一天!