我正在使用node.js,并且在中使用的一个js文件const
中"strict mode"
。尝试运行它时,出现错误:
SyntaxError: Use of const in strict mode.
最佳做法是什么?
编辑:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
var
。添加分号'use strict';
我正在使用node.js,并且在中使用的一个js文件const
中"strict mode"
。尝试运行它时,出现错误:
SyntaxError: Use of const in strict mode.
最佳做法是什么?
编辑:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
var
。添加分号'use strict';
Answers:
的const
和let
是2015年的ECMAScript的一部分(又名ES6与和谐),默认情况下在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
在服务器端使用带有声明的严格模式,并以和声标志启动服务器。对于客户端,应使用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,请确保您使用的节点版本正确。您可以在严格模式下检查node.green上的const兼容性。
我在另一篇文章中发现了类似的问题,并在其中详细发布了我的答案
/usr/bin/node
文件夹,该文件夹的值为0.10.46。
更新节点后的重要步骤之一是将节点二进制文件链接到最新安装的节点版本
sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node
which node
node --version
打印出版本号,例如v0.10.29
这可能不是每个人的解决方案,但对我而言。
如果使用的是NVM,则可能没有为运行的代码启用正确版本的节点。重新引导后,默认的节点版本将更改回系统默认值。
在使用本来很好的react-native时遇到了这个问题。只需使用nvm使用正确版本的节点即可解决此问题。
nvm use version-number-you-need
是您要做的。
自从问问题以来,该const
关键字的草稿已经成为ECMAScript 2015一部分的生活标准。同样,当前版本的Node.js 支持不带--harmony
标志的const声明。
有了上面说的,你现在可以运行node app.js
,具有app.js
:
'use strict';
const MB = 1024 * 1024;
...
获得语法糖和严格模式的好处。
我最近也遇到过类似的问题,并最终获得了此问答。这不是OP所寻找的解决方案,但可能会帮助其他遇到类似问题的人。
我使用PM2运行项目,并且在给定的登台服务器中,我使用的是Node,NPM和PM2的旧版本。我更新了所有内容,但是仍然保持相同的错误:
SyntaxError:在严格模式下使用const。
我试图停止并启动该应用程序几次。还尝试再次更新所有内容。没事。直到我跑步时注意到警告pm2 start
:
>>>>内存PM2已过期,请执行:
>>>> $ pm2更新
内存PM2版本:0.15.10
本地PM2版本:3.2.9
知道了!运行之后pm2 update
,我终于能够按预期运行该应用程序。不再有“在严格模式下常量”错误。
ECMAScript不支持const。因此,在指定严格模式后,您会收到语法错误。如果要使代码与所有浏览器兼容,则需要使用var而不是const。我知道,这不是理想的解决方案,但这就是它的本质。有多种方法可以在JavaScript中创建只读属性(请参见可以在Pure 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声明的常量将是块作用域的。
const
在ECMAScript中6的支持和它的广泛支持:kangax.github.io/compat-table/es6/#const但你在你的答案正确的- 'use strict';
和const
不混合。
const
为重新申报在Safari 7,但不是在Opera 21,Chrome 35版和Firefox 29
使用的const
严格模式下使用Chrome浏览器41.目前,发布Chrome浏览器测试版41已经释放,并支持它。
cd /
npm install -g nave
nave use 6.11.1
node app.js
npm install -g nave; nave use 6.11.1
+1