问题:非 TypeScript 文件不会拷贝到 dist 目录
NestJS 使用 TypeScript 编译器对代码进行编译,编译后的文件输出到 dist 路径,然后开发服务器也是从 dist 路径下启动。因为 TypeScript 编译器不能拷贝非 TypeScript 文件,因此 dist 路径下没有非 TypeScript 文件。
解决方案:assets 配置
在 nest-cli.json 中配置 assets 选项:
{
"compilerOptions": {
"assets": [
{
"include": "../public/**/*",
"outDir": "dist/public"
}
],
"watchAssets": true,
"deleteOutDir": true
}
}
作用:
- NestJS CLI 在编译后额外复制非
.ts文件到dist/ watchAssets: true表示在开发模式下监听这些文件的变化- 确保运行时可以访问到这些文件
配置说明
assets 配置方式
方式 1:字符串模式(简单)
{
"assets": [
"**/*.yml", // 所有 .yml 文件
"public/**/*", // public 目录下所有文件
"config/*.json" // config 目录下的 .json 文件
]
}
方式 2:对象模式(精细控制)
{
"assets": [
{
"include": "../public/**/*", // 包含的文件模式
"outDir": "dist/public", // 输出目录
"exclude": "**/*.tmp" // 排除的文件(可选)
}
]
}
路径说明
- 路径相对于
sourceRoot(通常是src) "public/**/*"表示src/public/**/*- 如果文件在项目根目录,需要使用
../向上查找
总结
- TypeScript 编译器只处理
.ts文件,编译输出到dist/ - 开发服务器运行
dist/下的编译后代码 - 非
.ts文件需要assets配置来复制到dist/ - 这样运行时才能访问到这些文件