質問: require('http'); ^^^^^ SyntaxError: Use of const in strict mode. 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 Server.init (/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/lib/server.js:115:16) at new Server (/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/lib/server.js:65:8) at Function.attach (/home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/lib/engine.io.js:123:16) at Server.initEngine (/home/vagrant/socket.io/node_modules/socket.io/lib/index.js:274:21) ``` 調べるとnode.jsのバージョン(v0.10.48)が古くsocket.ioに対応していないために起こるエラーであるとのことでしたのでUpdateしようとしたのですが、インストールをし直しても、npmから更新をかけても、バージョンが0.10.48から更新されません。 心当り等ありましたら教えていただけませんでしょうか? 追記いたします: OS : MacOS npm : v 5.5.1
回答: > > > ``` > /home/vagrant/socket.io/node_modules/socket.io/node_modules/engine.io/node_modules/uws/uws.js:3 > const http = require('http'); > ^^^^^ > SyntaxError: Use of const in strict mode. > ``` > > Vagrant + VirtualBoxで立ち上げた仮想マシン内のCentOSですね? 例えばMacでHomebrew等を利用してNode.jsを導入しても、 仮想マシンとは違う環境になってしまうので、Node.jsの環境は共有されません。 > > 調べるとnode.jsのバージョン(v0.10.48)が古くsocket.ioに対応していないために起こるエラーであるとのことでした > > > おっしゃる通りNode.jsのバージョンが古い事が原因です。 エラーメッセージを読む限りだと... エラーが出ているのはsocket.ioライブラリの中で発生しています。 `node_modules/socket.io/node_modules/engine.io/node_modules/uws/uws.js` 具体的な原因はuws.jsファイルの3行目、`const`を使って変数宣言していますが、 Node.jsのバージョンが古すぎてまだ未対応の書式と言っています。 つまり、そもそもNode.jsがコードの解析を諦めてエラーを出しているので実行すらしていません。 > > インストールをし直しても、npmから更新をかけても、バージョンが0.10.48から更新されません。 > > > CentOSが採用しているパッケージ管理ソフト、yumはソフトのバージョンを枯れた状態に保つ事を好みます。 なのでyumのパッケージで単純にアップデートを繰り返しても、Node.jsパッケージが更新される事はありません。 ですので、質問文の状況に陥ってしまい、いくらyumをアップデートしても古いバージョンのNode.jsしかインストールされなかったわけですね。 まずは古いNode.jsは下記の記事を参考にアンインストールしましょう。 CentOS 6.xにLTS(4.3.0)のnode.jsをインストールする おっと、インストールはまだしないでください。 Node.jsの公式サイトのダウンロードで、最新バージョンのNode.jsのインストール方法が紹介されています。 おまけ 私はnodebrewというNode.jsのバージョン管理ツールを利用しています。 ちょっと初期導入に癖がありますが、バージョンにすぐ追従出来るので便利に活用しています。 NVMといったパッケージ管理ツールもありますので、色々調べてみてください。