我有一个文件,我在那里动态创建导出,如:
import fs from 'fs';
import path from 'path';
import Sequelize from 'sequelize';
import config from '../config';
const sequelize = new Sequelize(config.database.name, config.database.user, config.database.password, {
dialect: 'postgres',
host: config.database.host,
logging: false,
define: {
underscored: true
}
});
const db = {
sequelize,
Sequelize
};
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf('.') !== 0) && (file !== 'index.js');
})
.forEach(function(file) {
const model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ('associate' in db[modelName]) {
db[modelName].associate(db);
}
});
export default db;
用babel 5注册挂钩这种代码工作得很好。现在我即将升级到babel 6,因此我使用了require('babel-register')
。它工作正常,除非我想调用动态添加的属性,如
import { sequelize } from './the_above_file';
然后变量sequelize
始终为undefined
。
但如果我打电话
import db from './the_above_file';
然后db.sequelize
有一个值。
有没有办法解决它,或者我必须避免导出中的动态值;
答案 0 :(得分:1)
import { sequelize } from './the_above_file';
应该从未工作过。您只有一个默认导出对象。默认导出的属性与命名导出不同。
这被认为是Babel 5中的一个错误,Babel 6修复了它。
你可以做到
import db from './the_above_file';
const { sequelize } = db;
提取默认导出的属性sequelize
。