如果我将 .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 模块中都可用。
您正在尝试使用
"babel-register"
和 "babel-preset-env"
,但在 Babel 7 中,这些包的范围位于 @babel
命名空间下。因此,更正后的代码使用 "@babel/register"
和 "@babel/preset-env"
代替。
.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 时自动进行转译。原始配置可能未正确设置以执行此即时转译,从而导致错误。