[轉]使用ts-node執行ts指令碼以及踩過的坑

dirgo發表於2024-10-12

原文地址:使用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": esnextes2005
  • 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

寫在最後

雖然程式設計師有很多交流問題的社群論壇,但跑了一圈後發現還是在githubIssues搜尋問題更高速有效,其他地方很多無效甚至答非所問的回答。

相關文章