建設(shè)銀行集團(tuán)網(wǎng)站首頁百度seo刷排名網(wǎng)址
在nestjs中進(jìn)行typeorm cli遷移(migration)的配置
在學(xué)習(xí)nestjs過程中發(fā)現(xiàn)typeorm的遷移配置十分麻煩,似乎許多方法都是舊版本的配置,無法直接使用. 花了挺長時間總算解決了這個配置問題.
db.config.ts
先創(chuàng)建db.config.ts, 該文件export了兩個對象,其中一個對象(ormConfig)用于 nestjs 使用,另一個對象(ormConfigForCli)給 typeormcli 使用。
兩個對象基本配置相同,主要是查詢的entities文件不同
- ormConfig去,dist文件夾下查找entity, 因為nestjs最終運行的是打包好的entity.js文件
- 而ormConfigForCli則可以直接運行編寫好的文件, 因此會在源代碼中查找entity.ts文件
import { DataSource, DataSourceOptions } from 'typeorm';// 基礎(chǔ)配置
const baseConfig: DataSourceOptions = {type: 'mysql',host: 'localhost',port: 3306,username: 'root',password: '123456',database: 'test',
};// 該對象用于 nestjs typeorm 初始化
export const ormConfig: DataSourceOptions = {...baseConfig,entities: ['dist/**/entities/*.entity{.js,.ts}'],
};// 該對象 typeorm cli 遷移時使用
const ormConfigForCli: DataSourceOptions = {...baseConfig,entities: ['src/**/entities/*.entity{.js,.ts}'],migrations: ['migrations/*{.js,.ts}'], // migration:run時查找的文件夾subscribers: ['subscribers/*{.js,.ts}'],logger: 'file',logging: true,
};// 實例化dataSource,用以之后cli使用
const dataSource = new DataSource(ormConfigForCli);// 此處的dataSource需要 export default才可以使用
export default dataSource;
nestjs中配置
類似官方文檔中的方式, 直接作為forRoot的參數(shù)即可. 文檔
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ormConfig } from './config/db.config';@Module({imports: [TypeOrmModule.forRoot(ormConfig)],
})
export class AppModule {}
package.json配置
首先需要在package.json配置腳本
"scripts": {// ...// 此處 -d 表示 -dataSource, 也就是db.config.ts中export的dataSource"typeorm": "typeorm-ts-node-esm -d ./src/config/db.config.ts","migration:generate": "npm run typeorm -- migration:generate","migration:run": "npm run typeorm -- migration:run","migration:revert": "npm run typeorm -- migration:revert"},
需要注意的是,新版本typeorm對于commonjs和esm有兩個不同的命令,本文中使用的是esm,所以使用typeorm-ts-node-esm, commonjs可以使用typeorm-ts-node-commonjs,具體可查看文檔
使用腳本進(jìn)行遷移
配置完畢后,就可以使用命令行了. 該命令會將遷移的文件輸出至根目錄的migrations文件夾下, 并生成 <時間戳>-alert-users-table.ts 遷移文件.
npm run migration:generate .\migrations\alert-users-table
需要注意的是,migration:generate的path為必須參數(shù), 若是忘記添加會報錯:缺少 non-option 參數(shù):傳入了 0 個, 至少需要 1 個
通過migration:run命令就可以執(zhí)行此次遷移了, 遷移命令是根據(jù)之前db.config.ts中的migrations選項查找遷移文件的
npm run migration:run
通過migration:revert可以撤銷遷移
npm run migration:revert
文件層級結(jié)構(gòu)
├─dist
├─src
│├─config
││└─db.config.ts
│├─app.modules.ts
└─migrations
│└─ 1670661241977-alert-users-table.ts
最后
為大家準(zhǔn)備了一個前端資料包。包含54本,2.57G的前端相關(guān)電子書,《前端面試寶典(附答案和解析)》,難點、重點知識視頻教程(全套)。
有需要的小伙伴,可以點擊下方卡片領(lǐng)取,無償分享