簡體   English   中英

ERR_MODULE_NOT_FOUND 如果沒有.js 擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM