繁体   English   中英

语法错误:在严格模式下使用 const

[英]SyntaxError: Use of const in strict mode

我正在使用 node.js,在我的一个 js 文件中,我在"strict mode"使用const 尝试运行它时,我收到一个错误:

SyntaxError: Use of const in strict mode.

这样做的最佳做法是什么?

编辑:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB

constlet是ECMAScript 2015(又名ES6和Harmony)的一部分,默认情况下在Node.js 0.10或0.12中未启用。 从Node.js 4.x开始,“所有出货[ES2015]功能,V8认为稳定,默认情况下在Node.js上打开,不需要任何类型的运行时标志。” Node.js文档概述了默认情况下启用的ES2015功能,以及需要运行时标志的功能 因此,通过升级到Node.js 4.x或更新版本,错误应该消失。

在Node.js 0.10和0.12中启用一些ECMAScript 2015功能(包括constlet ); 使用和声标志启动节点程序,否则会出现语法错误。 例如:

node --harmony app.js

这完全取决于您的严格js所在的一侧。 我建议在服务器端使用带有const声明的严格模式,并使用和声标志启动服务器。 对于客户端,您应该使用Babel或类似工具将ES2015转换为ES5,因为并非所有客户端浏览器都支持const声明。

如果在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指令

通常,当执行代码的节点版本比预期的更旧时会发生此错误。 (即0.12或更早)。

如果您使用的是nvm,请确保您使用的节点版本正确。 您可以在严格模式下检查node.green上的const兼容性

我在另一篇文章中发现了类似的问题,并在那里详细发布了我的答案

更新节点后的一个重要步骤是将节点二进制文件链接到最新安装的节点版本

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  

这可能不是每个人的解决方案,但它适合我。

如果您使用的是NVM,则可能没有为正在运行的代码启用正确版本的节点。 重新启动后,您的默认节点版本将更改回系统默认值。

在使用一直运行良好的反应原生物时遇到这种情况。 只需使用nvm即可使用正确版本的节点来解决此问题。

自提出问题以来, const关键字的草案已经成为ECMAScript 2015的一部分。 此外,当前版本的Node.js 支持没有--harmony标志的const声明

有了上面说过,您现在可以使用app.js运行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 ,我终于能够按预期运行应用程序了。 没有“const in strict mode”错误了。

我使用 pm2 来启动和维护节点进程。

在 CLI 中,它运行良好。

which node
/usr/local/bin/node
node -v
v10.15.0

但是,我设置了一个 cronjob 并且出现了语法错误。

然后写了一个cronjob来检查which nodenode -v ,令人惊讶的是,它是不同的路径和版本。

which node
/usr/bin/node
node -v
v0.10.48

要修复 cronjob,我必须使用标志--interpreter for --interpreter ,如下所示:

pm2 start dist/server.js --interpreter=/usr/local/bin/node 

ECMAScript不支持const。 因此,在指定严格模式后,会出现语法错误。 如果希望代码与所有浏览器兼容,则需要使用var而不是const。 我知道,不是理想的解决方案,但它就是它的本质。 有一些方法可以在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声明的常量将是块作用域。

随着Chrome 41的发布,可以在严格模式下使用const 。目前, Chrome 41 Beta已经发布并支持它。

cd /
npm install -g nave
nave use 6.11.1
node app.js

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM