node.js - 'SyntaxError : Unexpected token' after migration to different platform

标签 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并从头开始编译旧版本吗?

最佳答案

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

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

背景

meteor 本身主要是一个开发框架,结合了良好的实践和工具,并将所有代码 bundle 到一个节点应用程序中,该节点应用程序的运行方式与其他所有节点应用程序一样。

为了获得需要在服务器上安装的节点版本,您可以转到项目目录并让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>
  • 执行
  • 服务器需要与 meteor
  • 附带的版本相同的node版本

    关于node.js - 'SyntaxError : Unexpected token' after migration to different platform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214353/

    相关文章:

    core-data - 将普通的 sqlite3 数据库迁移到核心数据?

    javascript - 如何将cookie从客户端发送到服务器?

    javascript - 如何将draft-js editorState数据保存到Meteor?

    node.js - Elastic Search 唯一约束

    javascript - 我无法使用 meteor 中的每个函数返回文档数组

    meteor - 如何在 Meteor 中保持用户登录直到浏览器关闭?

    sql - 将数据从 Access 复制到 SQL

    php - 迁移时找不到驱动程序

    node.js - 将spawn进程的STDOUT通过管道传输到superagent上传中

    javascript - 如何在 Gulp 任务中拆分文件