【发布时间】:2019-09-05 19:41:56
【问题描述】:
我的节点应用程序将部署在无法访问互联网的银行中。我可以下载本地目录中的所有节点模块,然后从中安装它们,或者只是将 node_modules 复制到银行机器上吗?任何安全实用的建议将不胜感激,谢谢。
或
如何在不使用 internet 的情况下添加 node_modules 依赖项。
【问题讨论】:
标签: node.js npm npm-install offline
我的节点应用程序将部署在无法访问互联网的银行中。我可以下载本地目录中的所有节点模块,然后从中安装它们,或者只是将 node_modules 复制到银行机器上吗?任何安全实用的建议将不胜感激,谢谢。
或
如何在不使用 internet 的情况下添加 node_modules 依赖项。
【问题讨论】:
标签: node.js npm npm-install offline
将 offline-npm 添加到您的项目以提供与 npm 兼容的 tgz 文件,该文件包含使用 npm install 进行离线安装的所有依赖项。
此外,您可以使用 offline-npm -n 从本地 npm 缓存目录安装软件包
对于安装
npm install -g offline-npm
用法
1) 打开终端并转到您要准备离线使用的项目。此文件夹需要包含一个package.json 文件。
2) 准备您的项目以供离线使用
offline-npm --add
3) 这会更改 package.json 文件并添加一个包含所有依赖项的离线文件夹。
打包你的项目
npm pack
更多详情,请访问Link
希望这个答案对你有用。
【讨论】:
通常,您会希望将您的 node_modules 捆绑到您的可部署工件中。
这里有一些关于任何本机依赖项的问题,因为您需要将构建环境的 nodejs 版本与目标系统相匹配。
根据我的经验,实现这一目标的最简单方法是使用 docker 构建和打包您的部署。虽然直接在主机上运行时可以这样做,但您可能会发现最安全的做法是避免使用本机依赖项来消除任何因 nodejs 或 os 更新而中断的风险。
我也成功地将nodejs二进制文件打包到我的部署工件中,直接部署在centos主机上,但是当时我们混合使用centos 6和centos 7主机,这带来了与不同glibc相关的额外复杂性导致 nodejs 无法从系统提供的库启动的版本。
简而言之,如果可以的话,我会使用 docker 将您的应用程序打包成一个完全独立的映像。
【讨论】:
您可以将 node_modules 复制到部署机器中,但这是不好的做法。
还有其他解决方案,例如使用 local-npm 包...您的 npm 安装从注册表中获取,然后模块及其依赖项存储在本地 PouchDB 数据库中。这会缓存它们,以便后续 npm 安装使用本地缓存而不是调用网络。 local-npm 还负责在模块更改时保持更新。它通过侦听远程注册表的更改来做到这一点,因此您不必担心过时。
或捆绑您的软件包以离线使用它们,您可以访问此链接以获取有关离线安装 npm 软件包的更多详细信息: https://addyosmani.com/blog/using-npm-offline/
【讨论】:
Yarn 的主要优点之一是它可以从位于文件系统中的文件安装 node_modules。我们称其为“离线镜像”,因为它会镜像在第一次构建期间从注册表下载的文件,并将它们存储在本地以供将来构建。
下载yarn.tar.gz到本地仓库,安装到本地node_modules目录。
npm install yarn.tar.gz --no-save
#运行yarn install,将节点模块(.tar.gz)下载到离线镜像目录'$REPOSITORY/yarn/yarn-offline-mirror'。
npm run online-install
# 使用 yarn.lock 文件,从离线镜像目录 '$REPOSITORY/yarn/yarn-offline-mirror' 安装 node_modules
npm run offline-install
error can`t make a request in offline mode("http://....")
4.1.2.原因间接依赖无法下载到离线镜像目录
4.1.3。解析度yarn config set yarn-offline-mirror-pruning false
【讨论】: