3

Ich habe eine node.js API App, die über kontinuierliche Bereitstellung/Bereitstellung in VSO (Visual Studio Online) bereitgestellt wird.Azure node.js API App - Fehler während der Laufzeit (möglicherweise node.js Version Problem?)

Ich entdeckte, dass die App fehlschlägt, wenn ich Module wie "Express" importiere. Ich habe 'Express' auf der azurblauen Maschine über die Kudo-Konsole installiert. Aber das hat nicht geholfen.

Die Laufzeitfehler, die ich in der Ausgabekonsole sehen:

Application has thrown an uncaught exception and is terminated: 
SyntaxError: Unexpected token ILLEGAL 
    at Module._compile (module.js:439:25) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (D:\home\node_modules\tedious\lib\tedious.js:4:29) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 

Bitte beachte, dass ich diese article Sah die Knoten> 4. zu verwenden ist darauf hindeutet, aber wie man in meinem package.json sehen beziehe ich mich ausdrücklich auf Knoten> 6.

Die package.json sieht wie folgt aus:

{ 
    "name": "my_API_Service", 
    "engines": { 
    "node": "6.11", 
    "npm": "1.1.65" 
    }, 
    "version": "1.0.0", 
    "description": "", 
    "main": "MyService.js", 
    "dependencies": { 
    "async": "^2.6.0", 
    "body-parser": "^1.18.2", 
    "express": "^4.16.2", 
    "http": "0.0.0", 
    "sequelize": "^4.28.6", 
    "swaggerize-express": "^4.0.5", 
    "swaggerize-ui": "^1.0.1", 
    "tedious": "^2.1.5" 
    }, 
    "devDependencies": { 
    "gulp": "^3.9.1", 
    "gulp-util": "^3.0.8" 
    }, 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "repository": { 
    "type": "git", 
    "url": "https://<my_api_service_url>" 
    }, 
    "author": "", 
    "license": "ISC" 

============= Geschlossen ====== ======== =

I finally got my app running (very intuitively might i add) by configuring it on Windows OS (instead of Linux OS). I was really set on having it run on Linux, but it turned out to be a walk thru a mine field. 
+0

Was ist in Ihrer package.json Datei? Stellen Sie außerdem sicher, dass die CD "npm run" zum Starten verwendet, damit das gesamte Modul installiert wird. –

+0

In meiner Build-Definition ist der erste Schritt "npm install". Meinst du das sollte das "npm run" sein? Oder meinst du "npm install -g npm-run"? – AlvinfromDiaspar

Antwort

2

Erstens können Sie überprüfen, ob node_modules in Wwwroot-Ordner von Web-App-Service ist.

Zweitens basiert auf diesen Artikel: Using Node.js Modules with Azure applications

Azure Cloud Services erwarten, dass alle Module auf der Entwicklungsumgebung installiert werden, und die node_modules Verzeichnis als Teil des Bereitstellungspaket enthalten sein. Es ist möglich, die Unterstützung für die Installation von Modulen mit den Dateien package.json oder npm-shrinkwrap.json auf Cloud Services zu aktivieren; Diese Konfiguration erfordert jedoch die Anpassung der Standardskripts, die von Cloud-Dienstprojekten verwendet werden. Ein Beispiel für die Konfiguration dieser Umgebung unter : Azure-Startaufgabe zum Ausführen von npm install, um die Bereitstellung von Knotenmodulen zu vermeiden.

Also, es Pakete in node_modules (getestet muss NodeJS App über webpack zu kompilieren und Ausgabedateien ohne node_modules auf azur (Node JS Leere Web-App-Vorlage) bereitstellen, aber nicht geladen. Es in lokalen ohne node_modules funktioniert gut (Rufen Sie den Knoten xx.js zum Starten auf))

So können Sie die Pakete in Bereitstellungspakete einschließen oder den obigen Artikel verwenden, um die Windows Azure-Startaufgabe zum Ausführen von npm install zu verwenden, um die Bereitstellung von Knotenmodulen zu vermeiden.

+0

Wäre es eine andere Option, gulp zu verwenden, um die node_modules zum Deploy-Ort zu kopieren/zu deployen? – AlvinfromDiaspar

+0

Ich habe jetzt eine Aufgabe konfiguriert, um alles auf den wwwroot-Standort zu kopieren. Ich kann jetzt den Ordner node_modules dort sehen. Allerdings sehe ich immer noch den gleichen Stacktrace-Fehler. – AlvinfromDiaspar

+0

Können Sie das Build- und Release-Protokoll auf dem OneDrive teilen (persönliche Informationen entfernen)? –