流星不会启动。 ejson.js 中的“在严格模式之外尚不支持块范围声明(let、const、函数、类)”
Posted
技术标签:
【中文标题】流星不会启动。 ejson.js 中的“在严格模式之外尚不支持块范围声明(let、const、函数、类)”【英文标题】:Meteor won't start. "Block-scoped declarations (let, const, function, class) not yet supported outside strict mode" in ejson.js 【发布时间】:2018-04-02 01:17:34 【问题描述】:我是 Meteor 的新手,只是尝试安装并运行一个新应用程序。上周五我有东西可以工作,但今天不得不重新安装,无法再让应用程序运行。
安装是一个挑战。尝试在 Windows 上安装,发现安装程序不起作用。求助于提取 tar.gz 文件。此外,由于公司限制,必须安装到备用位置(%LocalAppData% 中的默认值已被策略锁定)。但是,正如我所说,这在上周有效,但今天无法正常工作。本周,团队中的其他人也开始看到这一点。第一次运行meteor
时,它会更新到meteor-tool到1.5.2.2,然后更新各种包。 ejson 包是一个,并且更新到 1.0.14。如果我运行meteor update
,它会说项目已经在 1.5.2.2。 (最新的)和***依赖项是最新的兼容版本。我该如何解决?谢谢!
控制台输出:
C:\dev\R&D\meteor\meteor-test>meteor
[[[[[ C:\dev\R&D\meteor\meteor-test ]]]]]
=> Started proxy.
=> Started MongoDB.
W20171020-14:19:35.920(-5)? (STDERR) C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\packages\ejson.js:749
W20171020-14:19:36.013(-5)? (STDERR) for (let i = 0; i < length; i += 1)
W20171020-14:19:36.016(-5)? (STDERR) ^^^
W20171020-14:19:36.018(-5)? (STDERR)
W20171020-14:19:36.019(-5)? (STDERR) SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
W20171020-14:19:36.021(-5)? (STDERR) at Object.exports.runInThisContext (vm.js:53:16)
W20171020-14:19:36.022(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:332:30
W20171020-14:19:36.023(-5)? (STDERR) at Array.forEach (native)
W20171020-14:19:36.025(-5)? (STDERR) at Function._.each._.forEach (C:\dev\programs\.meteor\packages\meteor-tool\1.5.2_2\mt-os.windows.x86_32\dev_b
undle\server-lib\node_modules\underscore\underscore.js:79:11)
W20171020-14:19:36.026(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:158:5
W20171020-14:19:36.028(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:388:5
W20171020-14:19:36.029(-5)? (STDERR) at Function.run (C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\profile.js:510:12)
W20171020-14:19:36.031(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:387:11
=> Exited with code: 1
W20171020-14:19:40.739(-5)? (STDERR) C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\packages\ejson.js:749
W20171020-14:19:40.741(-5)? (STDERR) for (let i = 0; i < length; i += 1)
W20171020-14:19:40.745(-5)? (STDERR) ^^^
W20171020-14:19:40.752(-5)? (STDERR)
W20171020-14:19:40.754(-5)? (STDERR) SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
W20171020-14:19:40.756(-5)? (STDERR) at Object.exports.runInThisContext (vm.js:53:16)
W20171020-14:19:40.757(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:332:30
W20171020-14:19:40.759(-5)? (STDERR) at Array.forEach (native)
W20171020-14:19:40.762(-5)? (STDERR) at Function._.each._.forEach (C:\dev\programs\.meteor\packages\meteor-tool\1.5.2_2\mt-os.windows.x86_32\dev_b
undle\server-lib\node_modules\underscore\underscore.js:79:11)
W20171020-14:19:40.765(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:158:5
W20171020-14:19:40.767(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:388:5
W20171020-14:19:40.769(-5)? (STDERR) at Function.run (C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\profile.js:510:12)
W20171020-14:19:40.771(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:387:11
=> Exited with code: 1
W20171020-14:19:45.026(-5)? (STDERR) C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\packages\ejson.js:749
W20171020-14:19:45.028(-5)? (STDERR) for (let i = 0; i < length; i += 1)
W20171020-14:19:45.030(-5)? (STDERR) ^^^
W20171020-14:19:45.031(-5)? (STDERR)
W20171020-14:19:45.033(-5)? (STDERR) SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
W20171020-14:19:45.034(-5)? (STDERR) at Object.exports.runInThisContext (vm.js:53:16)
W20171020-14:19:45.036(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:332:30
W20171020-14:19:45.037(-5)? (STDERR) at Array.forEach (native)
W20171020-14:19:45.039(-5)? (STDERR) at Function._.each._.forEach (C:\dev\programs\.meteor\packages\meteor-tool\1.5.2_2\mt-os.windows.x86_32\dev_b
undle\server-lib\node_modules\underscore\underscore.js:79:11)
W20171020-14:19:45.042(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:158:5
W20171020-14:19:45.043(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:388:5
W20171020-14:19:45.045(-5)? (STDERR) at Function.run (C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\profile.js:510:12)
W20171020-14:19:45.047(-5)? (STDERR) at C:\dev\R&D\meteor\meteor-test\.meteor\local\build\programs\server\boot.js:387:11
=> Exited with code: 1
=> Your application is crashing. Waiting for file change.
【问题讨论】:
猜测,我会说您的 javascript 引擎(流星?)没有使用最新的 javascript。寻找一种方法来告诉流星使用最新的 JavaScript 版本。 您在应用文件夹中运行meteor
之前是否运行了meteor npm install
?
是的。我已经这样做了。
【参考方案1】:
在 Meteor 中编写代码时必须注意语法。尽管 Meteor 运行在 Node.JS 之上,但它运行在较旧的版本上(例如 Meteor 1.5
与 NodeJs v4.8.x
捆绑在一起),而不是大多数 NodeJS 项目(NodeJS6.x
被认为是 LTS)。
在您的情况下,您似乎在 for
循环内使用 let
。在 NodeJS 7.x
(source) 之前,似乎不支持这种语法。相反,请使用 var
(这是较旧的 Javascript 标准)。
在使用 Meteor 时,我强烈建议使用预编译语言(如 Typescript
),因为它使您能够使用与更高版本的 Meteor 兼容的现代语法(节点 8.x
将是Meteor 的一部分1.6
)。
【讨论】:
不幸的是,错误的语法位于依赖包 (ejson) 中,并且在从命令行简单地运行meteor create meteor-test
后出现问题 - 而不是我自己的任何代码。我理解你在说什么,并且错误消息支持该声明,但如果这是真的,那意味着 Meteor 已损坏(至少在 Windows 上)。以上是关于流星不会启动。 ejson.js 中的“在严格模式之外尚不支持块范围声明(let、const、函数、类)”的主要内容,如果未能解决你的问题,请参考以下文章