node.js - "Impossibile trovare il modulo" quando si utilizza tsc per compilare TypeScript usando esm
Ho un package.json ESM come segue:
{
"main": "config.js",
"type": "module",
"scripts": {
"start": "npm run build && node ./build/config.js",
"build": "tsc",
...
e un tsconfig.json:
{
"compilerOptions": {
"target": "ES2015",
"module": "ES2020",
"strict": true,
"esModuleInterop": true,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"outDir": "./build"
},
"include": ["./src", "config.ts"],
"exclude": ["./*/**.spec.js"]
}
Quando eseguo npm run start ottengo il seguente errore:
> tsc
internal/modules/run_main.js:54
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'F:\Development\test\example\build\src\handlers\index' imported from F:\Development\test\example\build\config.js
at finalizeResolution (internal/modules/esm/resolve.js:277:11)
at moduleResolve (internal/modules/esm/resolve.js:658:10)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:748:11)
at Loader.resolve (internal/modules/esm/loader.js:97:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:243:28)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)
at link (internal/modules/esm/module_job.js:41:36) {
code: 'ERR_MODULE_NOT_FOUND'
La directory di build appare così:
Ho già provato a cambiare il tipo in commonjs e altre modifiche di configurazione, cosa sto sbagliando?
Risposta n. 1
Apparentemente, anche se stai usando TypeScript, dobbiamo cambiare gli import in .js, quindi nel mio esempio:
import IndexHandler da "./src/handlers/index";
diventa:
import IndexHandler da "./src/handlers/index.js";.
Non è considerato un bug, ma parte di TypeScript.
