package.json配置type:module时Windows下如何执行tsx脚本?
可行解决方案
方案1:调整ts-node配置适配ESM环境
针对你遇到的目录导入报错、tsx扩展名不识别问题,通过补充配置即可解决:
- 第一步:安装必要依赖
执行yarn add -D ts-node typescript @types/node @types/react - 第二步:修改
tsconfig.json配置,新增/调整如下字段{ "compilerOptions": { "target": "ES2020", "module": "ESNext", "moduleResolution": "Node", "jsx": "react-jsx", "esModuleInterop": true, "allowSyntheticDefaultImports": true }, "ts-node": { "esm": true, "experimentalSpecifierResolution": "node", "compilerOptions": { "jsx": "react-jsx" } } } - 第三步:修改package.json的scripts配置
将myScript命令调整为:"myScript": "node --loader ts-node/esm ./你的脚本路径.tsx"
方案2:使用tsx运行器(零复杂配置推荐)
tsx是基于esbuild的TypeScript/TSX运行器,天然兼容ESM模式,无需复杂配置即可适配你的场景:
- 第一步:安装依赖
执行yarn add -D tsx - 第二步:修改package.json的scripts配置
将myScript命令调整为:"myScript": "tsx ./你的脚本路径.tsx",直接运行即可。
注意事项
- Node 14的原生ESM模式不支持省略本地文件导入的扩展名,也不支持默认导入目录下的index文件,你需要把脚本里所有本地导入路径补全后缀,例如
import utils from './utils.ts'、import config from './config/index.ts' - 如果选择直接用tsc转译后运行,在tsconfig的compilerOptions中添加
"skipLibCheck": true即可过滤node_modules相关的类型报错 - 此前babel转译报
require is not defined是因为babel默认把模块转译为CommonJS规范,和package.json的"type": "module"冲突,无需再尝试该方案。
内容的提问来源于stack exchange,提问作者Marcelo Diani
相关产品推荐
相关产品推荐

