2017-01-18 1 views
1

echo "console.log('Test success!')" > app.jsIn Powershell geschrieben Dateien echo Befehl funktionieren nicht mit NodeJS

node app

Läuft auf Linux in Ordnung. Powershell erzeugt jedoch die folgende Fehlermeldung:

~\apps\test\app.js:1 
(function (exports, require, module, __filename, __dirname) { ��c 
                 ^
SyntaxError: Invalid or unexpected token 
    at Object.exports.runInThisContext (vm.js:76:16) 
    at Module._compile (module.js:528:28) 
    at Object.Module._extensions..js (module.js:565:10) 
    at Module.load (module.js:473:32) 
    at tryModuleLoad (module.js:432:12) 
    at Function.Module._load (module.js:424:3) 
    at Module.runMain (module.js:590:10) 
    at run (bootstrap_node.js:394:7) 
    at startup (bootstrap_node.js:149:9) 
    at bootstrap_node.js:509:3 

Auf der anderen Seite, wenn ich echo > app.js war, dann Eingang console.log('Test success!') aus einem Texteditor. node app läuft überall gut.

Wie kommt es?

Meine beste Vermutung: In PowerShell scheint Echo Hexadezimalzahlen und nicht UTF-8 zu machen.

Antwort

1

der Powershell > Operator erzeugt unweigerlich UTF-16LE -encoded Dateien, die node nicht verarbeiten kann.

in UTF-8-kodierte Dateien erstellen stattdessen verwenden Out-File oder Set-Content mit -Encoding Utf8:

"console.log('Test success!')" | Set-Content -Encoding Utf8 app.js 

anzumerken, dass Power ausnahmslos prepends eine pseudo-BOM (die ersten 3 Bytes hex sind Bytewerte EF BB BF.) Beim Erstellen UTF -8 Dateien, die nur in der Windows Welt verwendet wird, aber node scheint in der Lage, das zu handhaben, sowohl auf Windows-und Unix-ähnlichen Plattformen.

+1

Spot auf! Überprüft mit 'file *' in bash. Vielen Dank! – MarbinJavier

0

Das Verhalten hängt von der Shell ab, die Sie verwenden. Wenn Sie in Windows die Standardeingabeaufforderung cmd.exe verwenden, werden die Anführungszeichen selbst eingeschlossen. Also das app.js enthält:

"console.log ('! Test-Erfolg')"

die Anführungszeichen entfernen, wird das erwartete Ergebnis geben.

Echo console.log (‚Test Erfolg!‘)> App.js

Beachten Sie, dass, wenn Sie diese auf Powershell oder Linux ausführen, werden Sie unterschiedliche Ergebnisse erhalten, da diese Schalen Anführungszeichen anders handhaben.

+0

Absolut richtig. Ich werde klarstellen, dass dies in Powershell passiert. – MarbinJavier

Verwandte Themen