【发布时间】:2020-09-19 02:35:21
【问题描述】:
我正在尝试使用Node v14.3 和sequelize 设置项目。
我不想使用babel-register。而不是这个,我在我的package.json 中设置了"type": "module" 并使用所有开箱即用的 ES6 - ES11 功能。
我还想使用sequelize-cli 来设置和应用迁移。除以下命令外,一切正常:
& sequelize db:migrate
Sequelize CLI [Node: 14.3.0, CLI: 5.5.1, ORM: 5.21.11]
Loaded configuration file "config/config.json".
Using environment "development".
== 20200530214311-create-user: migrating =======
ERROR: Must use import to load ES Module: /home/kasheftin/work/tests/chai-http-publication/migrations/20200530214311-create-user.js
require() of ES modules is not supported.
require() of /home/kasheftin/work/tests/chai-http-publication/migrations/20200530214311-create-user.js from /home/kasheftin/.nvm/versions/node/v14.3.0/lib/node_modules/sequelize-cli/node_modules/umzug/lib/migration.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename 20200530214311-create-user.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /home/kasheftin/work/tests/chai-http-publication/package.json.
我们看到 sequelize-cli 在后台使用 require()。 ES 模块不允许这样做。它提出了 3 种方法来解决这个问题:
将 20200530214311-create-user.js 重命名为以 .cjs 结尾 - 无法完成,sequelize-cli 找不到以 .cjs 结尾的迁移。
将需要的代码更改为使用 import() - 我不想接触 sequelize-cli 代码。
删除 "type": "module" - 我不能,因为一切都停止了。
还有其他方法可以使sequelize-cli 工作吗?我正在大量使用测试,我希望在运行测试之前自动准备测试数据库。
【问题讨论】:
-
github.com/sequelize/cli/issues/861 仍处于打开状态。也许您只能使用解决方法?
-
谢谢,@Anatoly。安装 babel-core 包并添加 require("babel-core/register");我的 config.cjs 文件对我有用,就像链接中提到的那样。除此之外,我还需要安装 babel-preset-env 以使其正常工作。
-
您不是原始问题的作者。我可以复制我的评论作为答案吗?
-
是的。所以答案是目前不可能。
-
官方文档中提到了
babel-register:sequelize.org/master/manual/migrations.html。看来这是官方使用 es6 的方式
标签: node.js sequelize.js es6-modules sequelize-cli