javascript - 使用 babel-register 动态添加导出结果到 undefined

标签 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 寄存器钩子(Hook),这种代码工作得很好。现在我正要升级到 babel 6,所以我使用了 require('babel-register')。它工作正常,除了如果我想调用动态添加的属性,例如

import { sequelize } from './the_above_file';

那么变量sequelize始终是未定义。 但如果我打电话

import db from './the_above_file';

那么db.sequelize就有一个值。

有办法解决这个问题还是我必须避免导出中的动态值;

最佳答案

import {sequelize } from './the_above_file'; 应该永远不会工作,因为您没有使用该名称的 named 导出。您只有一个默认导出,它是一个对象。默认导出的属性与命名导出不同。

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

你可以做到

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

提取默认导出的属性sequelize

关于javascript - 使用 babel-register 动态添加导出结果到 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39258665/

相关文章:

javascript - 正则表达式第一个字母其余字母数字

javascript - 有没有办法一次执行所有 Modernizr 测试?

javascript - 如何修复 React.js 中的箭头函数以与 props 一起使用

javascript - 有没有办法在 reactjs 中更改 react-datepicker 的月份或年份时选择日期?

javascript - Node.js 异步等待 - 错误 regeneratorRuntime

javascript - 我可以阻止特定的 Javascript block 运行吗?

javascript - 扩展EventEmitter时如何解析 'this is not defined'?

javascript - 需要 Babel "^7.0.0-0",但在react-xml-parser包上加载了 "6.26.3"- 已经尝试了所有当前的解决方案

reactjs - 使用babel从node_modules导入模块但失败

javascript - 如何在没有图像文件的情况下将文本即时转换为图像