使用PM2编译运行Adonis 6 TypeScript应用遇错求助
解决Adonis 6 TypeScript编译后找不到env.js的问题及编译注意事项
一、解决env.ts未被编译的问题
你的tsconfig.json中include数组仅包含./src目录,根目录下的env.ts不在编译范围内,因此TypeScript编译器不会将其编译为env.js,导致PM2启动时出现文件找不到的错误。
修复步骤:
- 修改
tsconfig.json的include数组,添加根目录下的env.ts(若存在adonisrc.ts等其他根目录配置文件,建议一并加入):
{ "extends": "@adonisjs/tsconfig/tsconfig.app.json", "compilerOptions": { "rootDir": "./", "outDir": "./build", "types": ["@adonisjs/auth"] }, "include": [ "./src", "./env.ts", "./adonisrc.ts" // 可选,根据项目结构补充其他必要配置文件 ] }
- 重新执行编译命令:
npx tsc
此时env.ts会被编译到build/env.js路径下。
3. 确保PM2启动编译后的正确入口文件(通常为build/bin/server.js):
pm2 start build/bin/server.js --name your-app-name
二、Adonis 6 TypeScript编译注意事项
- 覆盖所有必要配置文件:除
env.ts外,根目录的adonisrc.ts、database.ts等框架配置文件都需加入include数组,避免编译后缺失依赖文件。 - 优先使用官方构建命令:建议用
node ace build替代直接npx tsc,Adonis官方构建工具会额外处理静态资源、视图文件,确保框架依赖的配置文件被正确编译和复制。 - 验证编译输出结构:编译后检查
build目录,确认env.js、adonisrc.js及src下所有编译文件都存在,且路径与原项目结构一致(因rootDir设为./)。 - 配置正确入口路径:在
package.json中将main字段指向编译后的入口文件(如"main": "./build/bin/server.js"),PM2启动时可直接执行pm2 start npm --name your-app -- start(需确保scripts中start命令指向编译后的文件)。 - 启用严格类型检查:编译时添加
--noEmitOnError参数(npx tsc --noEmitOnError),避免类型错误的代码被编译,提前发现潜在问题。 - 不随意修改默认编译配置:Adonis提供的
@adonisjs/tsconfig/tsconfig.app.json已配置适配Node.js环境的参数(如target: ES2022、moduleResolution: node16),无特殊需求不要修改这些基础配置。 - 生产环境禁用ts-node:生产环境必须使用编译后的JavaScript文件启动,禁止直接用ts-node运行,避免性能损耗和类型相关的运行时问题。
内容的提问来源于stack exchange,提问作者guyaloni
相关产品推荐
相关产品推荐

