NPM TypeORM - 修改/删除迁移文件后出现“错误:重复迁移”

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

我之前使用

npm run migration:generate <filename>
将一列添加到现有表中。

但是,我后来意识到我拼错了列名,所以我想重命名该列。 (showCommission -> showCommission)

由于只是在本地环境,所以我修改了迁移文件上的列名并运行

npm run migration:run

发生重复迁移错误,这是日志。

**addShowCommissionToCorporationProfile1643792138368 是修改后的导出类名。

typeorm 迁移:运行

查询:SELECT * FROM

INFORMATION_SCHEMA
.
COLUMNS
WHERE
TABLE_SCHEMA
= 'abc' AND
TABLE_NAME
= '迁移'

查询:SELECT * FROM

abc
.
migrations
migrations
ORDER BY
id
DESC

迁移运行期间出错:
错误:重复迁移:addShowCommissionToCorporationProfile1643792138368

at MigrationExecutor.checkForDuplicateMigrations
at MigrationExecutor.getMigrations
at MigrationExecutor.<anonymous> 
at step 
at Object.next 
at fulfilled 
at processTicksAndRejections npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] migration:run: `typeorm migration:run`

npm 错误!退出状态 1 npm ERR! npm 错误!失败于 [电子邮件受保护] 迁移:运行脚本。 npm 错误!这可能不是问题 npm。上面可能有额外的日志输出。

之后我尝试恢复

npm run migration:revert
,但出现了完全相同的错误。因此,我将迁移文件更改回其初始状态,并使用
npm run migration:generate --filename
创建迁移文件以重命名列,但仍然出现相同的错误。 最后,我删除了新创建的迁移文件并仅运行原始迁移文件(初始状态)并再次运行迁移,但仍然出现相同的错误。

任何人都可以告诉我如何解决这个混乱吗?

我只是想重命名该列...

如果您需要任何其他信息或有关情况的更多说明,请告诉我。

感谢您的所有帮助。

javascript database npm migration typeorm
4个回答
14
投票

我在 NestJS 项目上遇到了同样的错误。我的解决方案是删除 dist 文件夹,然后重建项目,然后我可以运行新的迁移。

说明:我们最近刚刚更改了项目结构,并将迁移移至不同的文件夹。然而,Nest 有一个奇怪的“bug”:当我们移动文件时,它会重建我们移动文件的项目部分,但不一定是我们删除文件的项目部分。因此在这种情况下会出现重复迁移。当我们重建整个东西时,构建中不再有重复的迁移。


2
投票

我遇到了类似的问题,并且对这个问题缺乏谷歌结果感到惊讶。

我也将它用于 NestJS 应用程序,但删除

dist
文件夹并再次运行构建(如其他答案中的建议)没有帮助。

事实证明,原因是我在迁移文件夹中使用了索引文件,除了迁移文件本身之外,该索引文件还导出了迁移。因此,当 TypeORM 扫描项目的迁移时(如果您为迁移文件提供正则表达式),它会导入两次 - 从迁移本身和索引文件。

因此,对于这样的情况,您有 2 个选择:

  • 从迁移文件夹中删除
    index.ts
  • 更改数据源的
    migrations
    选项的值以使用
    path/to/migrations/index.{ts,js}
    而不是文件名中带有
    *
    的正则表达式。在这种情况下,您还需要确保将新迁移添加到索引文件中。

0
投票

我执行 npm run build 并解决了问题。


0
投票

使用 TypeScript 迁移文件并

typeorm-ts-node-commonjs
运行它们时,将生成
.js
文件。这会导致数据源路径(例如
**/migrations/*.{js,ts}
)因重复迁移错误而失败,因为 glob 同时命中
.js
.ts
文件。

补救措施是从路径规范中删除

.js
文件。例如,
**/migrations/*.ts

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