私はnode.jsを使用constしていて、私ので使用しているjsファイルの1つで"strict mode"。実行しようとすると、エラーが発生します。
SyntaxError: Use of const in strict mode.
これを行うためのベストプラクティスは何ですか?
編集:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
var。セミコロンを追加'use strict';
私はnode.jsを使用constしていて、私ので使用しているjsファイルの1つで"strict mode"。実行しようとすると、エラーが発生します。
SyntaxError: Use of const in strict mode.
これを行うためのベストプラクティスは何ですか?
編集:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
var。セミコロンを追加'use strict';
回答:
constそしてlet(ES6とハーモニー別名)のECMAScript 2015の一部であり、Node.jsの0.10または0.12ではデフォルトで有効になっていませんでした。Node.js 4.x以降、「V8が安定していると見なすすべての出荷[ES2015]機能は、Node.jsではデフォルトでオンになっており、いかなる種類のランタイムフラグも必要としません。」Node.jsのドキュメントには、デフォルトで有効になっているES2015の機能と、ランタイムフラグを必要とするユーザーの概要が記載されています。したがって、Node.js 4.x以降にアップグレードすると、エラーが消えます。
Node.js 0.10および0.12でECMAScript 2015機能の一部(constおよびを含むlet)を有効にするため。調和フラグを使用してノードプログラムを開始しないと、構文エラーが発生します。例えば:
node --harmony app.js
厳密なjsがどちら側にあるかによります。constサーバー側で宣言を使用してストリクトモードを使用し、harmonyフラグを使用してサーバーを起動することをお勧めします。すべてのクライアントブラウザーが宣言をサポートしているわけではないため、クライアント側では、Babelまたは同様のツールを使用してES2015をES5に変換する必要がありますconst。
'use strict';自分自身を使用しますが、サードパーティのコードが自分で決めるようにします。
これがnodejsで発生している場合は、古いバージョンのnodejsが原因です。を使用してノードを更新し、
1)NPMのキャッシュをクリアします。
sudo npm cache clean -f
2)「n」という小さなヘルパーをインストールします
sudo npm install -g n
3)最新の安定したNodeJSバージョンをインストールする
sudo n stable
https://stackoverflow.com/a/19584407/698072から取得したnodejsの手順を更新します
nodeバージョンを指定した方が安全な場合があります。たとえば、この記事の執筆時点では、sudo n 6.9.4は最新のLTS sudo n stableをインストールし、はをインストールし7.4.0ます。明らかに、これは重大な変更であるため、に注意してくださいn stable。または、sudo n lts最新のLTSをインストールします。
通常、このエラーは、コードが実行されているノードのバージョンが予想よりも古い場合に発生します。(つまり、0.12以前)。
nvmを使用している場合は、使用しているノードのバージョンが正しいことを確認してください。strictモードでconstのnode.greenの互換性を確認できます
/usr/bin/nodeは0.10.46が含まれている私のフォルダーを調べました。
ノードを更新した後の重要なステップの1つは、ノードバイナリを最新のインストール済みノードバージョンにリンクすることです
sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node
which node
node --versionはバージョン番号を出力します。例v0.10.29
これはおそらく皆のための解決策ではありませんが、それは私のためでした。
NVMを使用している場合は、実行しているコードに対して適切なバージョンのノードを有効にしていない可能性があります。再起動すると、ノードのデフォルトバージョンがシステムデフォルトに戻ります。
正常に動作していた反応ネイティブで作業するときにこれに遭遇していました。この問題を解決するには、nvmを使用して適切なバージョンのノードを使用するだけです。
nvm use version-number-you-needあなたがしなければならないすべてです。
質問が出されたときから、constキーワードのドラフトはECMAScript 2015の一部としてすでに生きている標準です。また、Node.jsの現在のバージョンは、フラグなしのconst宣言をサポートしてい--harmonyます。
上記で、次のように実行できるようnode app.jsになりましたapp.js:
'use strict';
const MB = 1024 * 1024;
...
構文糖とストリクトモードの利点の両方を取得します。
最近同様の問題があり、このQ&Aに終わりました。これはOPが探していたソリューションではありませんが、同様の問題を抱えている他の人を助ける可能性があります。
PM2を使用してプロジェクトを実行しています。特定のステージングサーバーに、非常に古いバージョンのノード、NPM、およびPM2がありました。私はすべてを更新しましたが、同じエラーを維持し続けました:
SyntaxError:strictモードでのconstの使用。
アプリケーションを数回停止および開始しようとしました。また、すべてをもう一度更新しようとしました。何もうまくいきませんでした。実行したときに警告に気づくまでpm2 start:
>>>>インメモリPM2は最新ではありません。次のようにしてください。
>>>> $ pm2 update
インメモリPM2バージョン:0.15.10
ローカルPM2バージョン:3.2.9
ゲッチャ!を実行した後pm2 update、アプリケーションを期待どおりに実行することができました。「const in strict mode」エラーはなくなりました。
constはECMAScriptではサポートされていません。したがって、strictモードを指定すると、構文エラーが発生します。コードにすべてのブラウザーとの互換性を持たせたい場合は、constではなくvarを使用する必要があります。私は知っています、理想的な解決策ではありませんが、それはそれが何であるかです。JavaScriptで読み取り専用プロパティを作成する方法はいくつかありますが(「読み取り専用プロパティは純粋なJavaScriptで実装できますか?」を参照)、シナリオによってはやりすぎかもしれません。
以下は、MDNからのブラウザの互換性に関する注意事項です。
ブラウザの互換性
現在のconstの実装はMozilla固有の拡張であり、ECMAScript 5の一部ではありません。FirefoxとChrome(V8)でサポートされています。Safari 5.1.7およびOpera 12.00以降、これらのブラウザでconstを使用して変数を定義した場合でも、後でその値を変更できます。Internet Explorer 6〜10ではサポートされていませんが、Internet Explorer 11には含まれています。constキーワードは、現在、関数スコープで定数を宣言しています(varで宣言された変数など)。
Firefoxは、少なくともバージョン13以降、定数を再宣言するとTypeErrorをスローします。定数に別の値を割り当てても、主要なブラウザーは通知やエラーを生成しません。このような操作の戻り値は、割り当てられた新しい値の戻り値ですが、再割り当ては、FirefoxとChrome(少なくともバージョン20以降)でのみ失敗します。
constはECMAScript 6で定義されますが、セマンティクスは異なります。letステートメントで宣言された変数と同様に、constで宣言された定数はブロックスコープになります。
constECMAScriptの6に支持されており、それが広くサポートされています。kangax.github.io/compat-table/es6/#constをしかし、あなたはしているあなたの答えで右- 'use strict';とconst混合しません。
constではなく、オペラ21、クロム35およびFirefox 29でSafariの7で再申告である
使用conststrictモードでは、クロム41現在のリリースで利用可能であるクロム41ベータ版はすでにリリースされると、それをサポートしています。
cd /
npm install -g nave
nave use 6.11.1
node app.js
npm install -g nave; nave use 6.11.1 +1