我以不同的可能方式尝试了这个命令,但我的命令的基本结构是。
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 的最新更新删除了我们用来重命名迁移的 -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
我有一个类似的问题,但最初使用这样的 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",
有同样的问题,我现在找到的解决方法是使用编译后的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