Typeorm 迁移:生成失败非选项参数不足:有 0 个,至少需要 1 个

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

我以不同的可能方式尝试了这个命令,但我的命令的基本结构是。

 yarn typeorm migration:generate -n=consent-record -d=\"./src/db/CliDataSource.ts\"

这是我在 package.json 中针对yarn berry 的 typeorm 命令

"typeorm": "ts-node -P ./tsconfig.typeorm.json $(yarn bin typeorm) -d ./src/db/CliDataSource.ts",

我还尝试在本地安装 typeorm 作为 npm。并尝试使用 npx。 但他们都给出以下错误。 “非选项参数不足:有 0 个,至少需要 1 个” 这个错误显然没有提到缺少什么。

我的 CliDataSource 是这样的。

export const CliDataSource = new DataSource({
  type: 'postgres',
  host: 'localhost',
  port: 5436,
  username: '****',
  password: '******',
  database: 'consent',
  synchronize: false,
  logging: false,
  entities,
  migrations,
  migrationsRun: true,
  subscribers: [],
});

我正在使用 typeorm“^0.3.6”

typeorm
3个回答
19
投票

typeorm 的最新更新删除了我们用来重命名迁移的 -n 标志。现在的工作原理是我们需要提供迁移文件路径。它将把迁移存储在指定的文件中。所以更新后的操作是

package.json 中我的 typeorm 别名。

"typeorm": "ts-node -P ./tsconfig.typeorm.json $(yarn bin typeorm) -d ./src/db/CliDataSource.ts",

CLI 命令

 yarn typeorm migration:generate ./src/db/migrations/consent-record

官方文档似乎已经过时了。希望快点更新。

特别感谢 Jacob Copini @woov


2
投票

我有一个类似的问题,但最初使用这样的 util 文件解决了它

// contents of migration.ts

import { exec } from 'child_process';

const command = `npm run typeorm migration:create ./src/migrations/${process.argv[process.argv.length - 1]}`;

(() => exec(command, (error, stdout, stderr) => {
  if (error !== null) {
    console.error(stderr);
  }
  console.log(stdout);
}))();

package.json

"migration:create": "ts-node migration.ts"

要使用,请输入以下内容:

npm run migration:create unique-key-username

但是在 TypeORM 最新更改后应该如何完成:


// new syntax for TypeORM ormconfig.ts

const { DataSource } = require("typeorm");

require('dotenv').config();
for (const envName of Object.keys(process.env)) {
  process.env[envName] = process.env[envName].replace(/\\n/g, '\n');
}

const connectionSource = new DataSource({
  type: 'mysql',
  host: process.env.DB_HOST,
  port: +process.env.DB_PORT,
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  entities: [__dirname + '/entities/**/*.{js,ts}'],
  migrations: [__dirname + '/dist/src/migrations/*.js'],
});

module.exports = {
  connectionSource,
}

// package.json

"typeorm": "ts-node node_modules/typeorm/cli.js",
"migration:create": "ts-node migration.ts  -d ./ormconfig.ts",
"migration:run": "typeorm migration:run -d ./ormconfig.ts",
"migration:revert": "typeorm migration:revert  -d ./ormconfig.ts",


1
投票

有同样的问题,我现在找到的解决方法是使用编译后的js文件

例如,这会起作用

npx typeorm migration:generate Init -d dist/db/CliDataSource.js

由于 CLI 命令由于某种原因无法导入 .ts 文件,可能是因为它尝试生成的文件 URL,而且由于某种原因,如果最近的 package.json 文件设置为某种类型,它只会导入 ts 文件=> 模块

文件 URL ->

typeorm/src/db/CliDataSource.ts


: pathToFileURL(filePath).toString(), 
package.json module type check ->

typeorm/src/db/CliDataSource.ts/

 const isModule = (packageJson as any)?.type === "module" 

下面这个命令不起作用

npx typeorm migration:generate Init -d ./src/db/CliDataSource.ts
© www.soinside.com 2019 - 2024. All rights reserved.