TypeScript编写ESM模块时,如何引用待编译的本地文件?
TypeScript 迁移 Lambda 到 ESM 的导入解决方案
不用在TS文件里引用还没生成的.js文件,TypeScript完全能处理这个逻辑,按下面的步骤来就行:
配置TS编译选项
先把tsconfig.json里的关键参数调好,适配Node.js的ESM规范:{ "compilerOptions": { "module": "NodeNext", // 或ESNext,NodeNext更贴合Node.js的ESM解析逻辑 "moduleResolution": "NodeNext", "target": "ES2020", // 匹配Lambda支持的Node.js版本 "outDir": "./dist", // 指定编译后文件的输出目录 "esModuleInterop": true } }保持TS原生导入方式
在主TS文件里直接导入.ts文件即可,不用加.js后缀:import { fetchUrl } from './lib/fetch';TypeScript编译时会自动把这个路径转换成
./lib/fetch.js,完美符合ESM的要求,不用手动修改。部署时注意路径处理
编译后的文件都会输出到outDir指定的目录(比如dist),部署Lambda时只上传这个目录里的内容就行。如果用Serverless Framework或SAM这类工具,在配置里指定打包包含dist/**/*即可。额外的ESM标识配置
项目根目录的package.json里必须添加"type": "module",告诉Node.js整个项目遵循ESM规范,避免运行时出现模块类型不兼容的错误。
内容的提问来源于stack exchange,提问作者Mr Pablo
相关产品推荐
相关产品推荐

