【问题标题】:ES6 with Node.JS and SSHES6 与 Node.JS 和 SSH
【发布时间】:2016-05-27 12:29:10
【问题描述】:

我在我的 Node.JS 应用程序中使用了一些 ES6 功能,例如 let 关键字。服务器在我的本地机器上工作得很好。在将代码部署到远程机器(可以在线访问)后,我发现了一些奇怪的行为:如果我通过访问远程 shell 来启动服务器,然后执行 gulp,它可以完美运行:

local> ssh user@myserver.com
remote> gulp

但是,如果我通过将命令添加到 SSH 来走捷径,Node.JS 会突然抱怨 ES6 功能:

local> ssh user@myserver.com 'gulp'
...
[10:39:54] [nodemon] 1.8.1
[10:39:54] [nodemon] to restart at any time, enter `rs`
[10:39:54] [nodemon] watching: *.*
[10:39:54] [nodemon] starting `node bin/www`

/home/user/server/routes/searchItem.js:62
            let myItem = items.filter(item =>
    [10:39:54] [nodemon] app crashed - waiting for file changes before starting...
        ^^^
SyntaxError: Unexpected strict mode reserved word

为什么会这样?

【问题讨论】:

  • 您可以运行ssh user@myserver.com 'node -v' 来检查他尝试使用的节点版本吗?
  • 你有没有比较过通过ssh运行以下命令并登录的结果:node --versionecho $NODE_PATHwhich gulpecho $PATH等...

标签: node.js shell ssh


【解决方案1】:

这里发生的很可能是您安装了两个不同的节点副本。其中一个位于标准位置,另一个位于其他位置,由于您的 $PATH 在 shell 的 init/login/session 脚本中被更改(例如 .bashrc/.profile/@987654324 @)。

当您执行ssh user@myserver.com 时,将启动一个交互式会话。这意味着任何 shell 初始化/登录/会话脚本都会被执行。但是,传递显式命令使用不同的 ssh 协议级别机制,该机制不会在执行命令之前触发这些脚本运行(这就是为什么您在使用第一种方法时通常会看到 motd 和其他信息,而不是在使用显式命令时)。

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 2016-11-29
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多