使用babel-register和动态添加的导出结果为undefined

时间:2016-08-31 20:43:09

标签: javascript ecmascript-6 babeljs

我有一个文件,我在那里动态创建导出,如:

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有一个值。

有没有办法解决它,或者我必须避免导出中的动态值;

1 个答案:

答案 0 :(得分:1)

由于您没有使用该名称的命名导出,因此

import { sequelize } from './the_above_file';应该从未工作过。您只有一个默认导出对象。默认导出的属性与命名导出不同。

这被认为是Babel 5中的一个错误,Babel 6修复了它。

你可以做到

import db from './the_above_file';
const { sequelize } = db;

提取默认导出的属性sequelize