【问题标题】:How to deploy Javascript app that runs from command line?如何部署从命令行运行的 Javascript 应用程序?
【发布时间】:2019-12-25 19:52:44
【问题描述】:

我有一个使用 Node 用 Ja​​vascript 编写的简单 CLI 应用程序,供一个小团队内部使用。它作为 CLI 应用程序在 Linux 终端中运行。该应用程序由一个“.js”文件组成,需要几个 Node 包。我现在面临的问题是如何使用一种简单的方法将其部署到我们的内部团队,该方法适合我们保持最终用户计算机更新的日常流程。

我们的应用需要为每台工作站/笔记本电脑安装一次,并可供该计算机上的所有用户使用。任何用户都应该能够打开终端并输入命令来运行应用程序。

似乎很多人都讨论过使用 Javascript 进行 shell 编程,但是部署已完成应用程序的问题并没有被广泛讨论。我还没有找到关于这个话题的任何东西。到目前为止,我推荐了适用于开发环境或 Web 服务器的解决方案。

此应用不是网络应用,也未部署在服务器上。它需要离线运行。我也询问有关在开发工作站上开发或维护应用程序的问题

理想情况下,安装过程应该与在/usr/local/bin 中安装一个shell 脚本并设置权限一样简单,以便计算机上所有允许的用户都可以运行它。我们正在寻找这样的安装方法:

  • 仅将 Javascript 文件复制到每台计算机一次(复制到 $PATH 上的某个位置),并确保节点包在该计算机上全局可用。

  • 我特别希望避免为每台计算机上的每个用户帐户创建npm install

  • 我还希望避免为每台计算机上的每个用户帐户更新节点包。

开发人员会不断更新应用程序,使其始终与最新版本的 Node 包兼容,并且部署它的所有计算机将始终安装这些包的最新版本。

here 讨论了我遇到的一个具体问题,但答案假设了一组不同的要求(例如需要“在不同的包版本上运行多个应用程序”)。

【问题讨论】:

  • 对于这些要求,如果实际问题是解决 EACCESS 错误(您应该编辑问题以包含该信息),那么您应该查看所有目录的权限,并确保用户在每台计算机上管理节点包的帐户具有正确的权限。一种方法是给/usr/local 一个特殊的组,用chmod 设置粘性位(请参阅man chmod),使安装帐户成为该组的成员,并且不要将sudo 用于@ 987654330@.
  • @dirkt - 谢谢。你的建议听起来很合适。另外,我不愿意编辑这个问题。我不想让这个问题几乎重复。
  • @dirkt - 另外,我认为您的评论将是该问题的一个很好的答案。如果你想发布它,我会接受你的回答。
  • 如何使用打包解决方案来创建独立的离线可执行程序包并将其作为任何其他软件部署到您的工作站?然后,您可以在每个用户运行的每台计算机上拥有一个副本。像这样的东西:github.com/zeit/pkg 甚至是 Electron(如果你也喜欢 UI)
  • @Sohail - 感谢pkg 的链接。看起来很有趣。我已经解决了这个问题,但下次我会研究pkg

标签: javascript node.js linux shell deployment


【解决方案1】:

对于这些要求,如果实际问题是解决 EACCESS 错误(您应该编辑问题以包含该信息),那么您应该查看所有目录的权限,并确保管理节点包的用户帐户在每台计算机上都有正确的权限。

一种方法是给/usr/local一个特殊的组,用chmod设置粘性位(参见man chmod),并在现有树上使用chgrp -R

然后使安装帐户成为该组的成员,并且不要将sudo 用于npm install -g

(永远不要使用 sudo 安装到 /usr/local 中还有一个额外的好处,即您不会意外地在其他地方安装某些东西,例如因为您没有在此本地包源中正确设置路径。)

【讨论】:

    【解决方案2】:

    我们将这两种方法用于类似的部署:

    • 程序运行在特定的网络挂载上。所有用户都可以从那里运行相同的包。开发者只更新这个包。不复制到本地机器。

    • 我们使用一个简单的部署脚本,它在登录时在所有机器上运行。它将最新版本推送并复制到本地计算机。

    【讨论】:

    • 我不能使用您的第一个选项,因为当笔记本电脑未连接到本地网络时,这也需要在笔记本电脑上运行。在您的第二种方法中,您是在每台机器上为每个用户安装一个副本,还是每台机器(全局)安装一次?
    • 如果本地安装需要在每台机器上为每个用户安装一个副本,我想我会放弃Node进行下一个项目。
    • 您描述的问题并不是 Node.js 所特有的。任何需要在没有网络连接的机器上本地运行的应用程序都安装在该机器上。我在第二种方法中建议的方法应该通过不需要任何用户干预并提供集中的更新位置来更轻松地管理此部署和更新,从而更轻松地帮助实现这一目标。或者我可能误解了你的问题?除了 Node 应用程序之外,您认为哪些技术可以在本地运行而无需本地安装?
    • 是的,我们误会了。我确实希望在本地安装。我不希望在每台设备上多次本地安装。
    • 对不起。是的,我误会了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多