迁移到其他平台后,出现“ SyntaxError:意外令牌”

时间:2019-01-16 09:51:18

标签: node.js meteor migration syntax-error

我不是开发人员,但被要求将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并从头开始编译旧版本吗?

1 个答案:

答案 0 :(得分:0)

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 guide on custom deployment以一种易于理解的方式对此进行了总结,应作为进一步的阅读参考。解决此问题也应解决该错误。

长话短说

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