报错提示
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/srg/Documents/WebStormProject/study-note-vite-ts/src/ts/enums.ts
at new NodeError (node:internal/errors:405:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:136:11)
at defaultGetFormat (node:internal/modules/esm/get_format:182:36)
at defaultLoad (node:internal/modules/esm/load:101:20)
at ModuleLoader.load (node:internal/modules/esm/loader:417:13)
at ModuleLoader.moduleProvider (node:internal/modules/esm/loader:288:22)
at new ModuleJob (node:internal/modules/esm/module_job:63:26)
at ModuleLoader.#createModuleJob (node:internal/modules/esm/loader:312:17)
at ModuleLoader.getJobFromResolveResult (node:internal/modules/esm/loader:265:34)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:251:17) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
这边在最近使用了vite + ts + vue3搭建一个项目,来学习Typescript。但是,在使用npm 全局安装好了 typescript以及ts-node 后,使用tsc 命令,进行相应的编译没有任何问题,但是,使用对应的ts-node来直接运行ts格式的文件时,会报出这个错误。
错误原因分析
项目的根目录下,设置了type:module,在 node 支持 ES 模块后,要求 ES 模块采用 .mjs 后缀文件名。只要遇到 .mjs 文件,就认为它是 ES 模块。如果不想修改文件后缀,就可以在 package.json文件中,指定 type 字段为 module。这样所有 .js 后缀的文件,node 都会用 ES 模块解释。如果还要使用 CommonJS 模块规范,那么需要将 CommonJS 脚本的后缀名都改成.cjs,不过两种模块规范最好不要混用,会产生异常报错。
"type": "module"
typyscript 文件是需要编译成js,才能执行,这里在使用ts-node时,实际上相当于运行了tsc + node。
# Execute a script as `node` + `tsc`.
ts-node script.ts
这边的话,可以将package.json中的type的设置删除掉,之后,再使用ts-node来执行 ts格式的文件就能够正常执行了。