2017-01-18 5 views
1

echo "console.log('Test success!')" > app.js、echoコマンドを使用して書かれたファイルはNodeJS

node app

ランLinux上で正常に動作していません。私は、その後、echo > app.jsにテキストエディタから入力console.log('Test success!')た場合、一方

~\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 

:PowerShellは、しかし、次のエラーメッセージを生成します。 node appはどこでもうまく動作します。

どうしてですか?

私の最高の推測:PowerShellでは、echoは文字列を16進数でUTF-8ではないようです。

答えて

1

のPowerShellの>オペレータは、常にnodeを扱うことができないUTF-16LEエンコードさファイルを生成します。

-Encoding Utf8Out-File又はSet-Contentを使用する代わりに、UTF-8でエンコードされたファイルを作成する:PowerShellは必ずpseudo-BOMを付加することを

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

注(最初の3つのバイトはヘクスであるバイトがEF BB BF値。)UTFを作成する場合-8ファイルは、Windowsワールドでしか使用されていませんが、nodeは、WindowsとUnixライクなプラットフォームの両方でこれを処理できるようです。

+1

Spot on! bashで 'file *'を使って検証しました。ありがとう! – MarbinJavier

0

動作は、使用しているシェルによって異なります。 Windowsでは、標準のコマンドプロンプトcmd.exeを使用している場合は、引用符自体が含まれます。だから、app.jsはこれを含んでいます:

引用符を削除 "はconsole.log( 'テスト成功!')"

が期待される結果が得られます。

エコーはconsole.log(「テスト成功!」)>あなたはPowerShellのか、Linux上でこれを実行する場合、これらのシェルは、異なる引用符を処理するので、あなたは異なる結果を取得すること

注意をapp.js。

+0

完全に正しい。私はこれがPowershellで起こることを明確にします。 – MarbinJavier

関連する問題