如何通过sequelize-cli创建ES模块('.mjs')迁移文件?

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

我正在使用sequelize-cli 在我的 NodeJs 项目中编写 PostgreSQL 数据库迁移,并尝试在我的文件中遵循 ES 模块语法。

不幸的是,我找不到如何通过sequelize-cli创建和执行“.mjs”类型的迁移文件。

我想配置sequelize,以便当我通过命令行创建迁移时,生成的迁移文件应该是mjs类型。

我尝试按照 ChatGPT 的建议在配置文件中添加

migrationFileExtension: 'mjs'
,但它不起作用。

仅供参考,我正在 Raw PostgreSQL 中编写迁移(仅使用sequelize 的迁移功能)。

'use strict';

/** @type {import('sequelize-cli').Migration} */

console.log('in migration file');

export async function up(queryInterface, Sequelize) {
  console.log('up function');
  const createTableQuery = `
    CREATE TABLE users (
      id SERIAL PRIMARY KEY,
      username VARCHAR(50) NOT NULL UNIQUE,
      email VARCHAR(100) NOT NULL UNIQUE,
      password VARCHAR(255) NOT NULL,
      first_name VARCHAR(50) NOT NULL,
      last_name VARCHAR(50) NOT NULL,
      date_of_birth DATE,
      profile_picture_url VARCHAR(255),
      created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
    );
  `;
  
  await queryInterface.sequelize.query(createTableQuery);
}

export async function down(queryInterface, Sequelize) {
  const dropTableQuery = 'DROP TABLE IF EXISTS users;';
  
  await queryInterface.sequelize.query(dropTableQuery);
}

node.js ecmascript-6 sequelize.js sequelize-cli mjs
1个回答
0
投票

不幸的是,sequelize-cli 不直接支持开箱即用的 ES 模块用于迁移文件。但是,您仍然应该能够通过采用解决方法来使用 ES 模块语法。
设置 Babel 将 ES 模块语法转译为 Sequelize-cli 可以理解的 CommonJS。
首先安装一些必要的软件包,

npm install --save-dev @babel/core @babel/cli @babel/preset-env

使用以下配置在项目的根目录中创建 .babelrc 文件,

{
  "presets": [
    "@babel/preset-env"
  ]
}

编写一个帮助程序脚本来执行迁移。该脚本将采用 CommonJS 语法,并将调用您的 ES 模块迁移文件。创建一个名为 run-migrations.js 的文件

//run-migrations.js file
require('@babel/register')({
  extensions: ['.mjs', '.js'],
})

// Load and execute your sequelize-cli migration script
require('./node_modules/.bin/sequelize-cli db:migrate')

更新您的 package.json 脚本以使用帮助程序脚本执行迁移。

"scripts": {
  "migrate": "node run-migrations.js"
}

现在,当您运行 npm run migrate 时,它将使用 Babel-register 来转译您的 ES 模块迁移文件,然后再使用sequelize-cli 执行它们。确保根据您的项目结构调整路径和配置。

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