Миграция с Babel 6 на 7 экспортных настроек по умолчанию не определены - PullRequest
0 голосов
/ 25 апреля 2019

Мне было поручено перенести репо с Вавилона 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';, все работает отлично.

Есть ли какой-нибудь плагин, который мне не хватает, который позволит мне экспортировать импорт, как этот?Я перепробовал кучу вещей, и у меня не было никакого успеха.


РЕДАКТИРОВАТЬ:

Если я сделаю import * as models from 'models' в models/ExampleModel, я получу:

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