javascript - TSC compilează node_modules și fișierele de declarații de tip contrar direcției fișierului tsconfig.json
Am încercat să rezolv această problemă de o săptămână și sunt nedumerit. Partea nebună este că această aplicație a compilat perfect luni de zile și se pare că acest lucru s-a întâmplat pur și simplu fără a schimba nimic care ar fi putut afecta asta. Acum că mă gândesc, am făcut upgrade de la WSL la WSL2 și aproximativ atunci a început, posibil o coincidență.
Structura proiectului
/📁server
⚙tsconfig.json
/📁dist
server.js
/📁api
/📁v1
index.js
/📁accountDataFunctions
duplicates.js
notations.js
...
/📁sqlQueryGeneration
selectQuery.js
updateQuery.js
/📁src
server.ts
/📁api
/📁v1
index.ts
/📁accountDataFunctions
duplicates.ts
notations.ts
...
/📁sqlQueryGeneration
selectQuery.ts
updateQuery.ts
tsconfig.json
// ⚙tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./src",
"resolveJsonModule": true,
"removeComments": true,
"strict": false,
"baseUrl": "./",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"skipLibCheck": true,⭐
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
// "watch": true
},
"exclude": [
"node_modules"
],
"include": [
"src"
],
"watchOptions": {
"watchFile": "useFsEvents",
"watchDirectory": "useFsEvents",
"fallbackPolling": "dynamicPriority"
}
}
tsc --showFiles
//30x files in this directory (type definitions):
/home/surface/.nvm/versions/node/v14.15.4/lib/node_modules/typescript/lib/lib.es6.d.ts
//20x files in this directory (type definitions):
/mnt/c/Dev/Projects/debtportfol/server/node_modules/@types/node/globals.d.ts
// (this is actually my project root directory)
/mnt/c/Dev/Projects/debtportfol/
//50x files in this directory which are about 35 correct files, and 15 type definitions:
io/server/src/api/v1/generalFunctions/getDateAndTime.ts
/mnt/c/Dev/Projects/debtportfol/server/src/api/v1/generalFunctions/columns.ts
/mnt/c/Dev/Projects/debtportfol/server/node_modules/axios/index.d.ts
/mnt/c/Dev/Projects/debtportfol/server/node_modules/@types/long/index.d.ts
Am citit documentația oficială TS, am încercat să dezinstalez și să reinstalez, am tot modificat declarațiile include/exclude timp de ore întregi. Chiar nu pot să înțeleg de ce s-a întâmplat asta aparent din senin.
Am observat, de asemenea, că --watch flag pare să fi încetat să mai funcționeze. Din nou, lucrez la această aplicație de 9 luni și niciodată nu a fost o problemă până acum.
{
"main": "server.js",
"scripts": {
"serve": "tsc && concurrently \"tsc --watch\" \"nodemon dist/server.js\"",
"start": "tsc && node dist/server.js",
"startNormal": "node dist/server.js",
"devstart": "nodemon run dist/server.js",
"build": "tsc"
},
"dependencies": {
"@stripe/stripe-js": "^1.9.0",
...
"uuid": "^8.3.0"
},
"devDependencies": {
"@types/axios": "^0.14.0",
...
"concurrently": "^5.3.0",
"nodemon": "^2.0.3",
"typescript": "^4.2.3"
}
}
Răspuns #1
Acum că mă gândesc, am făcut upgrade de la WSL la WSL2 și cam atunci a început acest lucru, posibil o coincidență.
Cel puțin pentru funcționalitatea nodemon/--watch, nu este o coincidență. Vezi răspunsul meu aici pentru detalii despre motivul pentru care. Răspunsul scurt -- Suportul pentru sistemul de fișiere NTFS în WSL2 este destul de diferit față de WSL1, iar inotify nu este complet suportat în WSL2 în acest moment. Dacă este posibil, mută codul tău într-un loc aflat sub discul ext4 (de exemplu /home/surface/projects) sau păstrează o instanță separată de WSL1 pentru această utilizare.
Nu pot să mă gândesc la un motiv pentru care aceasta ar cauza schimbările TSC, dar este posibil să le corecteze și pe acestea.
Oricum, performanța WSL2 pe NTFS (protocolul 9P sub WSL2) este atât de teribil de proastă în acest moment încât chiar vrei să te ții de ext4 dacă este posibil. În timp ce folosesc WSL2 pentru activitățile mele zilnice, păstrez o instanță WSL1 actualizată pentru orice operațiuni care sunt chiar și puțin intensive pentru fișiere pe un drive NTFS (de exemplu, operațiuni de sincronizare rsync sau s3cmd). De exemplu, doar un git clone al proiectului kernelului Linux pentru WSL2 a durat ~10 secunde în /home/user pe ext4, dar mai mult de 10 minute pe /mnt/c/....