首页 > 解决方案 > 从 Babel 6 迁移到 7 导出默认值未定义

问题描述

我的任务是将回购从 babel 6 迁移到 7。

通天塔 6 .babelrc

{
  "presets": [ "es2015", "stage-3" ],
  "plugins": [
    "transform-runtime",
    "transform-decorators-legacy",
    "transform-object-rest-spread",
    "transform-class-properties",
    ["module-resolver", {
      "root": ["./src"]
    }]
  ] 
}

通天塔 7 .babelrc

{
  "presets": [["@babel/preset-env", {
    "targets": {
      "node": "current"
    }
  }]],
  "plugins": [
    "@babel/plugin-transform-runtime",
    "@babel/plugin-proposal-class-properties",
    ["module-resolver", {
      "root": ["./src"]
    }]
  ]
}

和:

"@babel/cli": "^7.4.3",
"@babel/core": "^7.4.3",
"@babel/node": "^7.2.2",
"@babel/preset-env": "^7.4.3",
"@babel/runtime": "^7.4.3",
"@babel/plugin-transform-runtime": "^7.4.3",
"@babel/plugin-proposal-class-properties": "^7.4.0",

有趣的是,当我nodemon --exec babel-node .似乎大多数默认导出都是undefined.

项目结构如下:

- src
   - models
   - controllers
   - ...etc

./src/models/index.js导入一堆模型,添加Sequelize关系等,然后导出,例如:

// models/index.js
import ExampleModel from 'models/ExampleModel';
import OtherModel from 'models/OtherModel';

//...

ExampleModel.belongsTo(OtherModel, { as: 'other_model' });

// ...

export {
  ExampleModel,
  OtherModel
}

然后个别模型导入其他模型models/index.js来设置自己:

// models/ExampleModel.js
import { OtherModel } from 'models';

const ExampleModel = db.define('ExampleModel', {
   // ...
   otherModelId: {
      type: Sequelize.BIGINT,
      references: { model: OtherModel, key: 'id' },
    },
   // ...
});

export default ExampleModel

OtherModel设置非常相似:

    const OtherModel = db.define('OtherModel', {
      // ...
    });

    export default OtherModel;

ExampleModel会抛出一个错误说:

/src/models/index.js:23
    return _OtherModel.default;
                       ^

TypeError: Cannot read property 'default' of undefined
    at Object.get [as OtherModel] (src/models/index.js:23:24)
    at Object.OtherModel (src/models/ExampleModel.js:82:28)

如果我只是进行常规导入,则import OtherModel from 'models/OtherModel';一切正常。

是否有某种我缺少的插件可以让我像这样导出导入?我已经尝试了很多东西,但没有任何成功。


编辑:

如果我做 a import * as models from 'models'in models/ExampleModel,我会得到:

{
   OtherModel: [Getter],
   AnotherExportedModel: [Getter],
   // ...etc
}

标签: node.jssequelize.jsbabeljs

解决方案


推荐阅读