當我嘗試將用 TypeScript 撰寫的 node.js 后端部署到 Heroku 時,遇到了一個非常奇怪的錯誤。同一組代碼在我的本地環境(以及我隊友的所有本地環境)中完美運行,但在 Heroku 上失敗了。Heroku 日志給了我這個錯誤:
(node:4) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
import dotenv from "dotenv";
^^^^^^
SyntaxError: Cannot use import statement outside a module
我查看了其他 stackoverflow帖子,他們說我需要包含"type": "module"在我的package.json檔案中才能啟用import. 但是,這樣做會給我另一個錯誤:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
.ts如果我想擁有這些import陳述句,基本上就失去了識別檔案的能力。我在不同的stackoverflow帖子中嘗試了很多東西,但它們并沒有真正起作用。所以我停止“修復”我的代碼,因為我的代碼在本地環境中完美運行。我想知道這是否是 Heroku 的問題,Heroku 上是否有我可以更改的設定,以便此代碼可以像我的本地環境一樣作業?
import或者在使用 TypeScript 時是否有更好的方法來解決陳述句問題?
供您參考,這是我的package.json檔案:
{
"name": "booknbucks-backend",
"version": "1.22.15",
"main": "index.js",
"license": "MIT",
"scripts": {
"start": "node app.ts",
"dev": "nodemon app.ts",
"build": "tsc",
"production": "node dist/app.js"
},
"dependencies": {
"@types/dotenv": "^8.2.0",
"@types/express": "^4.17.13",
"@types/mongodb": "^4.0.7",
"bcryptjs": "^2.4.3",
"compression": "^1.7.4",
"cors": "^2.8.5",
"dotenv": "^16.0.0",
"express": "^4.17.2",
"firebase-admin": "^10.0.2",
"helmet": "^5.0.2",
"jsonwebtoken": "^8.5.1",
"moment": "^2.29.1",
"mongoose": "^6.2.0",
"mongoose-paginate-v2": "^1.6.3",
"node-cron": "^3.0.0",
"typescript": "^4.6.3"
}
}
這是我的tsconfig.json檔案:
{
"compilerOptions": {
"module": "commonjs",
"target": "esnext",
"sourceMap": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"baseUrl": "."
},
"exclude": ["node_modules"],
"include": ["**/*.ts"]
}
uj5u.com熱心網友回復:
您的構建腳本正在運行tsc,但您的啟動腳本仍會嘗試運行未編譯的.ts檔案而不是已編譯的.js檔案。
將其指向已編譯的檔案:
"start": "node dist/app.js",
請注意,Procfile如果它存在,您的將優先于您的啟動腳本,因此請務必檢查那里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512617.html
標籤:节点.js打字稿表示herokuecmascript-6
