NX集成项目中Knex迁移无法找到@ici/shared模块求助
解决NX项目中Knex迁移无法找到共享模块的问题
先构建共享包
Knex执行迁移时直接读取编译后的JS文件,NX monorepo里的@ici/shared不会自动为其他项目预构建。先执行构建命令确保输出目录有编译文件:nx build shared让Knex识别TS Config路径
Knex本身不支持解析tsconfig里的paths配置,需要借助tsconfig-paths模块处理:- 安装依赖:
npm install tsconfig-paths --save-dev - 修改knexfile.js(或ts版本的配置文件),在顶部添加路径注册:
如果用ts-node执行Knex,也可以在命令里直接加注册参数,比如在package.json的scripts中:require('tsconfig-paths/register');"migrate:up": "ts-node -r tsconfig-paths/register ./node_modules/knex/bin/cli.js migrate:up"
- 安装依赖:
用NX目标封装迁移命令并依赖前置构建
在@ici/project的project.json中添加自定义目标,确保迁移前先构建依赖的共享包:{ "targets": { "migrate:up": { "dependsOn": ["^build"], "executor": "nx:run-commands", "options": { "command": "knex migrate:up" } } } }之后用NX命令执行迁移:
nx run project:migrate:up这里的
^build会自动先构建所有依赖项目(即@ici/shared),保证共享模块已编译完成。检查TS路径配置的正确性
确认@ici/project的tsconfig.json中,paths指向的是共享包的编译输出目录而非源码目录:{ "compilerOptions": { "baseUrl": ".", "paths": { "@ici/shared": ["../dist/packages/shared"] } } }
内容的提问来源于stack exchange,提问作者bramdc
相关产品推荐
相关产品推荐

