.带有 ESM 模块的sequelizerc 不适用于 @babel/register 和 @babel/preset-env

问题描述 投票:0回答:1

如果我将 .sequelizerc 文件 babel 包更改为 @babel/register 和 @babel/preset-env Sequelize CLI 将停止工作(以下代码按原样工作)。

require("babel-register")({
    presets: [["babel-preset-env", { targets: { node: "current" } }]],
});
// I want this to be:
// require("@babel/register")({
//     presets: [["@babel/preset-env", { targets: { node: "current" } }]], 
// });

const path = require("path");
require("dotenv").config();

module.exports = {
    config: path.resolve("dist/server/config", "config.js"),
    "models-path": path.resolve(
        "dist/server/models/" + process.env.MICROSERVICE_NAME
    ),
    "seeders-path": path.resolve(
        "dist/server/seeders/" + process.env.MICROSERVICE_NAME
    ),
    "migrations-path": path.resolve(
        "dist/server/migrations/" + process.env.MICROSERVICE_NAME
    ),
};

打电话时

npx sequelize-cli db:migrate
ESM 在迁移中导入然后抛出错误:

错误:ES 模块的 require() C:...\dist\server\migrations\globalData�30602000000-langs.js 来自 C:... 不支持 ode_modules\umzug\lib\migration.js。反而 更改 20230602000000-langs.js 的要求 C:... ode_modules\umzug\lib\migration.js 到动态 import() ,其中 在所有 CommonJS 模块中都可用。

sequelize.js babeljs es6-modules sequelize-cli
1个回答
0
投票

您正在尝试使用

"babel-register"
"babel-preset-env"
,但在 Babel 7 中,这些包的范围位于
@babel
命名空间下。因此,更正后的代码使用
"@babel/register"
"@babel/preset-env"
代替。

您还可以将 Babel 配置移至单独的文件 (

.babelrc
):这将确保 Babel 的行为在整个项目中保持一致。在您的代码中,配置是内联的
.sequelizerc
,如果代码的其他部分依赖于不同的 Babel 设置,这可能会导致差异。

所以,首先安装

@babel/register
@babel/preset-env

npm install --save-dev @babel/register @babel/preset-env

然后在项目的根目录中创建一个

.babelrc
文件,其中包含以下内容:

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }]
  ]
}

该配置告诉 Babel 使用

@babel/preset-env
预设,它将您的代码转换为与当前 Node.js 版本兼容的 JavaScript 版本。

最后,更新

.sequelizerc
以使用
@babel/register

require("@babel/register");

const path = require("path");
require("dotenv").config();

module.exports = {
  config: path.resolve("dist/server/config", "config.js"),
  "models-path": path.resolve("dist/server/models/" + process.env.MICROSERVICE_NAME),
  "seeders-path": path.resolve("dist/server/seeders/" + process.env.MICROSERVICE_NAME),
  "migrations-path": path.resolve("dist/server/migrations/" + process.env.MICROSERVICE_NAME),
};

当 Sequelize CLI 运行迁移时,如果文件使用当前 Node.js 环境不支持的语法,则需要转换文件。通过在

@babel/register
文件的开头要求
.sequelizerc
,您可以确保在文件被
require
d 时自动进行转译。原始配置可能未正确设置以执行此即时转译,从而导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.