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

IT技术 javascript node.js
2021-01-16 03:28:04

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

SyntaxError: Use of const in strict mode.

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

编辑:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
6个回答

constlet是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 特性(包括constlet);使用和声标志启动您的节点程序,否则您将收到语法错误。例如:

node --harmony app.js

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

也可以使用标志(而不是文字表达式)节点 --harmony --use_strict app.js 应用严格模式,这很好。
2021-03-19 03:28:04
FWIW 我发现在运行 node v8.1 但 armfh 版本(树莓派)时遇到了同样的问题。
2021-03-20 03:28:04
我想建议不要使用“use_strict”标志。它在一个不是为它编写的解释器中运行其他人的代码。始终使用'use strict';自己,但让第三方代码自行决定。
2021-03-28 03:28:04
这是最完整和最相关的答案。
2021-04-09 03:28:04

如果这发生在 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 说明

我在尝试执行第 2 步时收到了“npm ERR!notsup 不受支持的 npm ERR!notsup 与您的操作系统或架构不兼容:n@2.1.4”的消息。美好时光。
2021-03-18 03:28:04
适用于 centos 6.5。早些时候我收到以下错误“SyntaxError:在严格模式下使用const”。谢谢
2021-03-23 03:28:04
根据您的用例,您可能会发现指定node版本更安全例如,截至撰写本文时,sudo n 6.9.4将安装最新的 LTS,sudo n stable在何处安装7.4.0. 显然,这是一个重大更改,因此请注意n stable. 或者,sudo n lts安装最新的 LTS。
2021-04-03 03:28:04
Badass 感谢这一点,它不仅解决了这个问题,还解决了构建 SCA Local 时所有固有的小缺点
2021-04-07 03:28:04
这解决了我在 --harmony 标志没有的旧机器上的问题。设置:尝试使用 crontab 中的脚本启动屏幕 npm start 监视器会导致严格的错误,而从 cli 运行它却没有。以前的节点版本是在 ubuntu 12.04.5 LTS 上运行的 0.10.48 我遵循了这一步,将软链接 /usr/bin/node 从 /etc/alternatives/node 更改为 /usr/local/n/versions/node/8.0 .0/bin/node 一切正常。这次真是万分感谢!
2021-04-11 03:28:04

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

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

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

我在 WebStorm 中运行我的 Node 项目时遇到了这个问题。我在 repo 中的本地版本运行的是 Node 8.2.1,但 WebStorm 查看了我的/usr/bin/node文件夹,其中有 0.10.46。
2021-04-07 03:28:04

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

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  
@JoseLlausasnode --version打印出版本号,例如v0.10.29
2021-03-15 03:28:04
如何确定刚刚安装的是哪个版本?
2021-03-23 03:28:04
您可以通过运行找到您当前版本的节点的安装位置 which node
2021-03-24 03:28:04
您还将在运行“n stable”时看到该目录 在这一行中: mkdir : /usr/local/n/versions/node/8.0.0 所以你可以去 /usr/local/n/versions/node/并查看存在哪些目录。
2021-03-27 03:28:04

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

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

在使用一直运行良好的 react-native 时遇到了这个问题。只需使用 nvm 使用正确版本的 node 即可解决此问题。

@Kermit_ice_tea 问题中的相同代码。错误在节点的版本中,使用 NVM 将其设置为没有该错误的版本使该代码通过。 nvm use version-number-you-need这就是你所要做的。
2021-03-13 03:28:04
以及任何代码来说明您上面所说的“解决方案”?
2021-03-19 03:28:04
是的,这是我最初的问题。尽管由于过时的 centos 版本上的节点和 gcc 版本兼容性问题,我无论如何不得不切换到另一个 linux 服务器。
2021-04-01 03:28:04