node.js - Impossibile trovare il modulo '../lib/tsc.js' durante il rilascio dell'applicazione TypeScript su Azure
Sto cercando di rilasciare un'applicazione TypeScript su un Azure App Service in esecuzione su Linux. Sto facendo questo utilizzando Azure DevOps. Ho configurato una pipeline di build e release che ha successo, ma quando visito l'URL del mio app service, vedo un messaggio che dice ":c Errore dell'applicazione" e fa riferimento ai log diagnostici. Questi log mi danno il seguente errore:
Errore: Impossibile trovare il modulo '../lib/tsc.js'
Registro completo degli errori
[email prod /home/site/wwwroot
> npm run build && npm run start
> [email build /home/site/wwwroot
> tsc
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module '../lib/tsc.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (/home/site/wwwroot/node_modules/.bin/tsc:2:1)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email build: `tsc`
npm ERR! Exit status 1
Il mio ambiente Azure Devops consiste in una pipeline di build che esegue un npm install e pubblica questo su un artefatto e una pipeline di rilascio che esegue un deploy e poi lancia un comando di avvio. Questi passaggi riescono e il comando di avvio viene eseguito, ma genera gli errori sopra indicati.
Ho provato a costruire l'applicazione prima di creare l'artefatto, ma questo ha causato errori nella fase di build dove non riusciva a trovare i file che venivano importati. Posso eseguire il comando npm run prod senza problemi localmente.
Qualcuno ha qualche idea su cosa potrebbe causare questo?
Package.json
{
"name": "MyApp",
"version": "1.0.0",
"description": "",
"main": "./dist/index.js",
"scripts": {
"build": "tsc",
"dev": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec ts-node src/index.ts",
"start": "nodemon ./dist/index.js",
"prod": "npm run build && npm run start",
"test": "mocha --ui tdd -r ts-node/register tests/**/*.test.ts"
},
"author": "",
"license": "ISC",
"dependencies": {
"@google/chatbase": "^1.1.2",
"@types/express": "^4.17.0",
"actions-on-google": "^2.7.1",
"body-parser": "^1.19.0",
"dotenv": "^8.0.0",
"express": "^4.17.1",
"morgan": "^1.9.1",
"nodemon": "^1.19.1",
"ssml-builder": "^0.4.3",
"ts-sinon": "^1.0.17",
"ts-node": "^8.3.0",
"tsc-watch": "^2.2.1",
"typescript": "^3.5.3",
"uuid": "^3.3.2"
},
"devDependencies": {
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"chai": "^4.2.0",
"mocha": "^6.1.4"
}
}
Tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"pretty": true,
"sourceMap": true,
"target": "es6",
"outDir": "./dist",
"baseUrl": "./src",
"resolveJsonModule": true,
"esModuleInterop": true,
},
"include": [
"src/**/*.ts",
"src/data/*.json",
"src/data/sounds/*.mp3"
],
"exclude": [
"node_modules"
]
}
Risposta n. 1
Ho affrontato lo stesso problema a causa della copia di node_modules.
SOLUZIONE
La seguente modifica in package.json risolve il problema:
"scripts": {
"build": "./node_modules/typescript/bin/tsc", // not just "tsc"
...
}
DESCRIZIONE
C'è uno script tsc originale posizionato in node_modules/typescript/bin/tsc, ma c'è un collegamento simbolico a questo file posizionato in node_modules/.bin/tsc.
Mentre node_modules/.bin/tsc è un collegamento simbolico, l'importazione di ../lib/tsc.js funziona correttamente, ma dopo la copia è solo un file con lo stesso contenuto, quindi la copia sta rompendo questa importazione tramite percorso relativo.
Quindi specificare il percorso dello script tsc originale risolve questo problema.
Risposta n. 2
RISOLTO
rm -rf your_project/node_modules
