node.js - 迁移到不同平台后出现“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?
解决方案
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 附带的版本相同的版本
推荐阅读
- firefox - 如何在 Amazon Linux (EC2) 实例上安装 GTK3 和 Firefox?
- php - PHP浮动添加正则表达式添加空格和逗号
- docker - 无法从 Docker 访问 phpMyAdmin
- mysql - OR mix with LIKE combine with a full external join 模拟输出不需要的结果
- java - 我应该总是关闭 BufferedReader 吗?
- keras - keras 中用于端到端时间序列预测的标量自定义损失函数,导致 NaN 损失和预测
- python - 以 django 形式包含验证码
- ios - 在 Appium 中使用 autoWebview 功能的目的是什么,特别是对于 iOS(带有 webviews)?
- pypy - ../pypy3/bin/pip3 install 给出错误
- sql - SQL (where in) 不返回任何结果