TypeScript编译成功后server.mjs为何未出现在lib输出文件夹
问题原因及解决方案
核心原因
server.mjs未生成主要来源于以下配置或文件结构问题:
- 你的
tsconfig.json中include字段仅配置了src目录,若server.ts(TS入口源文件)没有放在src目录下,tsc编译时会直接忽略该文件,自然不会生成对应的输出文件。 - TypeScript默认仅处理
.ts/.tsx后缀的源文件,你贴出的mymodule.mjs是原生ES模块文件,若没有开启allowJs配置,TS不会处理这类非TS后缀的文件,也不会将其复制到输出目录。 - 你当前的TS配置默认输出的是
.js后缀的CommonJS模块,不会自动生成.mjs后缀的文件:你的compilerOptions.module配置为commonjs,且没有配置模块后缀规则,就算编译成功输出的也是server.js而非server.mjs,启动命令直接找.mjs后缀自然会报错。 - 需确认你是否真的存在
server.ts(或对应入口源文件),你贴出的文件里只有mymodule.mjs,如果根本没有入口源文件,编译工具不可能凭空生成对应的输出文件。
解决步骤
- 确认入口文件位置:把
server.ts入口文件移动到src目录下,如果你非要放在其他位置,就在tsconfig.json的include数组里添加对应路径,示例:
"include": ["src", "./server.ts"]
- 调整模块输出配置:
如果你不需要强制使用.mjs后缀,最简单的方案是把package.json里的start命令改成node lib/server.js,匹配TS默认输出的后缀即可。
如果你确实需要输出.mjs后缀的ES模块,做两个调整:- 在
tsconfig.json的compilerOptions中把module改成ESNext - 把你的入口源文件重命名为
server.mts,TS编译时会自动输出server.mjs文件
- 在
- 如果需要保留原生.mjs文件:在
tsconfig.json的compilerOptions中添加"allowJs": true,TS就会把src目录下的.js/.mjs文件也复制到输出目录。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

