【问题标题】:Syntax error on const {LEVEL,MESSAGES} when trying to run meteor application尝试运行流星应用程序时 const {LEVEL,MESSAGES} 的语法错误
【发布时间】:2018-04-11 16:56:01
【问题描述】:

我正在接管一个使用 Meteor 版本 1.4.2.3 开发的项目。在使用 meteor run 运行项目时,我得到以下异常:

W20180411-12:35:00.369(-4)? (STDERR) packages\modules.js:583
W20180411-12:35:00.603(-4)? (STDERR) const {LEVEL, MESSAGE} = require('triple-beam');
W20180411-12:35:00.603(-4)? (STDERR)       ^
W20180411-12:35:00.603(-4)? (STDERR) 
W20180411-12:35:00.604(-4)? (STDERR) SyntaxError: Unexpected token {
W20180411-12:35:00.604(-4)? (STDERR)     at Object.exports.runInThisContext (vm.js:53:16)
W20180411-12:35:00.604(-4)? (STDERR)     at C:\Users\roberth\Programming Projects\xxx\.meteor\local\build\programs\server\boot.js:289:30
W20180411-12:35:00.605(-4)? (STDERR)     at Array.forEach (native)
W20180411-12:35:00.605(-4)? (STDERR)     at Function._.each._.forEach (C:\Users\roberth\AppData\Local\.meteor\packages\meteor-tool\1.4.2_3\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\underscore\underscore.js:79:11)
W20180411-12:35:00.605(-4)? (STDERR)     at C:\Users\roberth\Programming Projects\xxx\.meteor\local\build\programs\server\boot.js:128:5
W20180411-12:35:00.605(-4)? (STDERR)     at C:\Users\roberth\Programming Projects\xxx\.meteor\local\build\programs\server\boot.js:344:5
W20180411-12:35:00.606(-4)? (STDERR)     at Function.run (C:\Users\roberth\Programming Projects\xxx\.meteor\local\build\programs\server\profile.js:480:12)
W20180411-12:35:00.606(-4)? (STDERR)     at C:\Users\roberth\Programming Projects\xxx\.meteor\local\build\programs\server\boot.js:343:11
=> Exited with code: 1

我尝试了以下方法:

  • 窗口:
    • 卸载nodejs v6并安装v8
    • 卸载流星并使用 choco 重新安装
  • Linux:
    • 使用包管理器安装节点 (v6.12.3)
    • 使用 sh 安装流星

同样的错误发生在 Windows 和 Linux 上,老实说,我不知道是什么导致了这个问题。

我在这里缺少什么?

编辑

package.json

{
  "name": "meteor",
  "private": true,
  "scripts": {
    "start": "meteor run"
  },
  "dependencies": {
    "babel": "^6.23.0",
    "babel-cli": "^6.26.0",
    "babel-runtime": "6.18.0",
    "bson-ext": "^1.0.1",
    "meteor-node-stubs": "~0.2.0",
    "moment": "^2.17.1",
    "mongoose": "~4.4",
    "triple-beam": "^1.1.0",
    "winston": "2.x",
    "winston-mongodb": "latest"
  }
}

更新

由于我不知道meteor 使用的是Node 的内置版本,所以我卸载了node、meteor 并删除了repo。然后我通过 choco 安装了流星并克隆了存储库。在运行meteor npm installmeteor run 之后,我收到了与上述意外令牌完全相同的问题。

更新 2

我已经能够确定 node_modules 目录有问题。如果我将 node_modules 目录从工作机器复制到我的开发箱,它会按预期工作。

新问题:如何确定哪个包有问题?我很犹豫是否将 node_modules 目录提交到 git 作为修复程序,并希望深入了解这一点。

【问题讨论】:

  • 只需使用triple-beam npm 包创建一个新项目并复制您的错误行但没有错误。你在meteor run 之前运行过meteor npm install 吗?
  • 顺便说一下,您不需要安装节点,因为 Meteor 内部附带了一个节点版本。
  • @Jankapunkt 我不知道它是随节点一起提供的——谢谢你的花絮。我之前运行过 npm install 。我还安装了三光束,也没有解决它。在我看来,这个问题与语法有关,几乎就像流星无法识别 ES6 语法
  • 这似乎是一个通天问题。您可以添加您的 package.json 依赖项的摘录吗?
  • 你能在工作机器上运行npm list 吗?然后比较两个..应该显示安装的版本差异..我怀疑这会缩小一点。

标签: javascript node.js meteor


【解决方案1】:

看起来你的违规行来自 winston-mongodb 包。自 Meteor 1.4 发布以来,它已经经历了 2 个主要版本。

因此很可能您的package.json 中的 semver 规范 "latest" 太松散了。它允许全新安装获取最新版本的软件包,它使用与 Meteor 版本附带的节点版本不兼容的新 ES 语法。

正如@Pogrindis 所建议的,您应该能够通过检查您的工作安装的node_modules 来确定要使用的正确winston-mogodb 版本。

您也可以尝试升级 Meteor。 1.6 版现在使用节点 8+。

您的工作安装中的软件包也不太可能已在本地转译。如果约束包版本仍然不起作用,那么这更有可能。

【讨论】:

  • 谢谢,我已经开始了一个新的干净项目并更新了所有的包。现在一切都在正确构建。
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 2015-01-02
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2015-01-29
  • 1970-01-01
相关资源
最近更新 更多