我刚刚接到一个项目,而 javascript 绝不属于我的专业范围。
我已经全局安装了 TypeORM 并尝试运行:
npm run typeorm migration:generate -d ./apps/server/src/common/datasource.ts
配置.ts
import { dataSource } from './datasource';
export const config = () => {
try {
const _config = {
http: {
port: process.env.NEST_API_HTTP_PORT,
ssl: process.env.NEST_API_HTTP_SSL,
key: process.env.NEST_API_HTTP_KEY,
cert: process.env.NEST_API_HTTP_CERT,
cors: process.env.NEST_API_HTTP_CORS,
globalPrefix: process.env.NEST_API_HTTP_GLOBAL_PREFIX,
},
db: dataSource,
secrets: {
pwdsalt: process.env.NEST_API_SECRETS_PWDSALT,
jwt: process.env.NEST_API_SECRETS_JWT,
},
rules_engine: {
url: process.env.RULES_ENGINE_URL,
globalPrefix: process.env.RULES_ENGINE_HTTP_GLOBAL_PREFIX,
},
};
return configSchema.validateSync(_config);
} catch (err) {
throw new Error((err as ValidationError).message);
}
};
数据源.ts
import { DataSource } from "typeorm";
export const dataSource = new DataSource({
type: 'postgres',
host: process.env.DATABASE_HOST,
port: Number(process.env.DATABASE_PORT),
name: process.env.DATABASE_NAME,
username: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
synchronize: Boolean(process.env.DATABASE_ENABLE_SYNC)
});
package.json - 脚本:
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
它只是响应
Couldn't find tsconfig.json. tsconfig-paths will be skipped
'missing required argument: dataSource'
我尝试过更改路径,但也可以从 ts-node 到 typeorm 等可执行文件。
值得注意:它位于 Nx monorepo 项目中并使用 NestJs
NestJS/nx 版本缺失;)
但是,长话短说,这就是我在 NestJS 10、nx 17.3.0 上适用的方法:
typeorm
中创建目标 project.json
(不是 package.json
!),使用命令:TS_NODE_PROJECT="{PATH_RELATIVE_TO_MONOREPO_ROOT}" && \
node && \
--require ts-node/register && \
--require tsconfig-paths/register && \
{PATH_RELATIVE_TO_MONOREPO_ROOT}/mode_modules/typeorm/cli.js && \
--config {PATH_RELATIVE_TO_MONOREPO_ROOT}/{PATH_TO_TYPEORM_CONFIG}
JSON 应该如下所示:
{
"build": { "...": "..."},
"migrate": {
"command": "{COMMAND_FROM_ABOVE}"
}
}
nx run {backend_name}:{migrate}
nx run backend:migrate --somearg "foo"
,参数很有可能无法被 nx 正确解析。因此,最好在 project.json
中创建一些目标(用于运行、滚动迁移等)。或者为此创建一个自定义执行器。