[转]使用ts-node运行ts脚本以及踩过的坑
原文地址:使用ts-node运行ts脚本以及踩过的坑 - 不作声 - 博客园
-----------------------------------------------------
我碰到的情况:
跟着下面的案例学习ts
快速上手 TypeScript | Vue3 入门指南与实战案例
npm安装ts-node,package.json启动脚本"dev:esm": "node src/esm/index.mjs"
运行 npm run dev:ts 报错SyntaxError: Unexpected token 'export'
搜索引擎搜索,有的说node版本低,升级版本,无效
又有说package.json里增加"type": "module",加上,原报错没有了,但又有新报错TypeError: Unknown file extension ".ts" for
最后找到了下面这篇文章,将运行脚本改为 "dev:ts": "node --loader ts-node/esm src/ts/index.ts",可以正常运行了,只是报告了一个警告,不影响使用
-----------------------------------------------------
应用场景
在代码日常中,经常会需要写各种脚本,今天使用ts写了个脚本,运行的时候各种报错,还是决定写下来。
运行ts脚本需要一个库ts-node
,这个库不能全局安装,否则会报错。
yarn add -D ts-node
# 或者
npm i ts-node -D
使用
安装好后开始添加配置项:
- 在
ts.config.json
中添加配置"module": esnext
或es2005
- 在
package.json
中添加配置"type":"module"
- 在文件中的
import
语句中「包含文件扩展名」,如import data from './data'
改为import data from './data.js'
,另外.ts
后缀也要改为.js
然后就可以使用命令行命令运行ts脚本。
node --loader ts-node/esm ./my-script.ts
报错
在这个过程中报错不少,在网上各种论坛跑来跑去,终于解决了问题。
❝❞
SyntaxError: Cannot use import statement outside a module
无法在模块外使用import,解决这个问题需要在package.json
文件中添加"type":"modules"
。
❝❞
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\1\Desktop\my-project\data'
imported from 'C:\Users\1\Desktop\get-data.ts'
找不到导入的模块,是因为没有在导入的文件中添加后缀名。
❝❞
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
我收到这条报错的时候,命令行命令使用的是ts-node ./myscripts.ts
,改用以下命令时,问题解决。
node --loader ts-node/esm ./my-script.ts
❝❞
ReferenceError: fetch is not defined
获取数据使用了fetch
库,不是标准的Nodejs方法,需要下载node-fetch
yarn add node-fetch
写在最后
虽然程序员有很多交流问题的社区论坛,但跑了一圈后发现还是在github
的Issues
搜索问题更高速有效,其他地方很多无效甚至答非所问的回答。