我正在尝试动态导出模块。我已经很接近了,但不知道如何修复我的语法。
硬编码:
// index.js inside folder 'models'
const { User } = require('./User');
const { Token } = require('./Token');
const { Session } = require('./Session');
module.exports = {
User,
Token,
Session,
};
动态编码(不起作用):
// index.js inside folder 'models'
const fs = require('fs');
const path = require('path');
module.exports = () => {
fs.readdirSync(__dirname).forEach((file) => {
if (file === 'index.js') return false;
const fullName = path.join(__dirname, file);
if (file.toLowerCase().indexOf('.js')) {
// I think this somehow needs to be destructured like
// `return {require(fullName)}` or
// `require(fullName)[fullName]` I think
require(fullName);
}
});
};
在代码的其他地方,我根据文件夹名称对其进行初始化:
// server.js
require('./models')();
最佳答案
您的动态导出将不起作用,因为您没有向导出函数返回任何内容。
尝试将此代码作为动态模型导出文件
// index.js inside folder 'models'
const fs = require('fs')
const path = require('path')
const models = {}
fs.readdirSync(__dirname)
.filter(file => file !== 'index.js')
.forEach(file => {
const fullName = path.join(__dirname, file)
if (file.toLowerCase().endsWith('.js')) {
// Removes '.js' from the property name in 'models' object
const [filename] = file.split('.')
models[filename] = require(fullName)[filename]
}
})
module.exports = models
此方法不再导出函数,因此您在 server.js
中的要求现在应该如下所示
// server.js
require('./models');
关于javascript - 如何动态地 module.export 文件夹中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67663836/