[英]ERR_MODULE_NOT_FOUND if no .js extension
我有一個 typescript 項目,當我嘗試使用節點運行編譯的app.js
文件時,我得到了ERROR_MODULE_NOT_FOUND 'path/to/compiled/file'
。 但是,如果我在我的 app.js 中的 import 語句中添加 a.js 擴展名,就像import { function } from "./path/file.js";
如何讓 typescript 編譯器自動添加 these.js 擴展? 或者,讓節點在沒有 .js 擴展名的情況下工作?
我的tsconfig.json
看起來像這樣:
{
"compilerOptions": {
"module": "esnext",
"target": "es5",
"noImplicitReturns": true,
"noUnusedLocals": true,
"outDir": "dist",
"sourceMap": true,
"moduleResolution": "node",
"esModuleInterop": true,
"isolatedModules": true,
"resolveJsonModule": true,
"typeRoots": ["./src/types", "node_modules/@types"],
"baseUrl": "./src",
"paths": {
"types": ["types"],
"types/*": ["types/*"],
"@data/*": ["data/*"],
"@execute/*": ["execute/*"],
"@indicators/*": ["indicators/*"],
"@services/*": ["services/*"],
"@strategies/*": ["strategies/*"],
"*": ["node_modules/*"]
}
},
"compileOnSave": true,
"include": ["src", "test", "dist"],
"exlude": ["src/types"]
}
我的app.ts
看起來像這樣:
import { function } from "./path/file";
function();
console.log("test");
export {};
我在嘗試在節點上設置新的 typescript 項目時遇到了完全相同的問題。
最后為我解決的問題是在模塊選項上用 commonjs 替換 esnext。
我以前使用 esnext 是因為有一個頂級等待,但是通過使用異步 function 包裝等待來解決這個問題。
我無法解釋為什么使用 esnext 編譯的 javascript 導入沒有 .js 擴展名,或者如何調整編譯器以為也將被編譯的本地模塊添加此擴展名。
我有同樣的錯誤。 typescript 項目中的結尾“.js”看起來很奇怪,但是當我嘗試這樣啟動應用程序時,沒有它就不起作用:
"start": "node ."
如果您添加--experimental-specifier-resolution=node那么它將起作用。 我不確定向應用程序添加“實驗性”內容是否是一種好習慣,但您可以將其用作臨時解決方案。
"start": "node --experimental-specifier-resolution=node ."
此外,節點 v18 正在警告您:ExperimentalWarning:
Node.js 說明符分辨率標志是實驗性的。 它可以隨時更改或刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.