首页 > 解决方案 > 迁移到不同平台后出现“SyntaxError: Unexpected token”

问题描述

我不是开发人员,但我被要求将 1.3.4.1 版 Meteor 部署迁移到新的 (CentOS 7) 平台。原来的公司消失了,应用程序开发人员走了,不合作了…… :(据我所知,唯一的事情就是发布。

当我在新服务器上运行以下命令时:

meteor run --port 3000 --release 1.3.4.1

我看到很多东西(下载包,构建,链接,..)运行良好,但几分钟后,当应用程序启动时,我最终在 build modules.js 中出现语法错误:

[meteor@rfcwerkboek rfc-project]$ meteor run --port 3000 --release 1.3.4.1
[[[[[ ~/prod/rfc-project ]]]]]                

=> Started proxy.                             
W20190116-00:49:49.745(1)? (STDERR)           
W20190116-00:49:50.037(1)? (STDERR) /home/meteor/prod/rfc-project/.meteor/local/build/programs/server/packages/modules.js:26622
W20190116-00:49:50.038(1)? (STDERR)    matches.forEach(nextMatch => {
W20190116-00:49:50.038(1)? (STDERR)                               ^
W20190116-00:49:50.039(1)? (STDERR) SyntaxError: Unexpected token >
W20190116-00:49:50.039(1)? (STDERR)     at /home/meteor/prod/rfc-project/.meteor/local/build/programs/server/boot.js:292:30
W20190116-00:49:50.040(1)? (STDERR)     at Array.forEach (native)
W20190116-00:49:50.041(1)? (STDERR)     at Function._.each._.forEach (/home/meteor/.meteor/packages/meteor-tool/.1.3.4_1.wmvsc.7d2bga++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
W20190116-00:49:50.041(1)? (STDERR)     at /home/meteor/prod/rfc-project/.meteor/local/build/programs/server/boot.js:133:5
=> Exited with code: 8 

modules.js 中出现语法错误的那段代码是:

   var fileFound = null;
   matches.forEach(nextMatch => {
      if( fileFound !== null ) return;

      if( nextMatch[1].length < 1 ){
         fileFound = new Buffer(0);
         return;
      }

删除构建并再次启动该过程并不能解决问题。

现在只是一些,我在.meteor/local/build/中发现了一个名为.node_version.txt的文件,它说:

v0.10.45

我的新 CentOS 7 发行版有 nodejs 版本:

[meteor@rfcwerkboek rfc-project]$ node --version
v6.14.3

我想这可能是问题的原因。我对吗?如果我是对的,我是否应该通过删除标准 nodejs RPM 并从头开始编译旧版本来降级 nodejs?

标签: node.jsmeteormigrationsyntax-error

解决方案


Meteor 附带内置node二进制文件,因此您不需要node开发系统中安装。

但是,如果您的 CentOS 是您的应用程序将被部署的目标服务器,则您需要安装确切的 node版本才能执行捆绑的应用程序(但服务器上不需要安装 Meteor)。

背景

Meteor 本身主要是一个开发框架,它结合了良好的实践和工具,并将所有代码捆绑到一个节点应用程序中,它像所有其他节点应用程序一样运行。

为了获得需要安装在服务器上的节点版本,您可以转到项目目录并让 Meteor 打印它的节点版本:

$ cd myproject
$ meteor node -v
0.10.45

例如 Meteor 1.7 版本的节点版本。所以如果你想在你的服务器上运行你的构建,它需要这个节点版本。

请注意,如果命令的版本与命令的版本不同,.node_version.text那么您收到的版本meteor node -v就是运行时使用的版本meteor build,应该安装在服务器上。

自定义部署的Meteor 指南以易于理解的方式总结了这一点,应在进一步阅读时参考。解决这个问题也应该解决错误。

长话短说

  • Meteor 是一个带有node二进制文件的开发框架
  • 您的服务器不需要安装 Meteor
  • 本地开发操作系统不需要额外node安装
  • 开发机器上的所有 npm 命令都应该使用meteor npm <command>
  • 服务器需要node与 Meteor 附带的版本相同的版本

推荐阅读