两台Linux机器。两者都是CentOS x64,但版本不同。
假设我在机器#1上运行npm install
,将包括node_modules
目录在内的整个应用程序复制到机器#2并在那里运行。这支持了吗?或者,始终建议在每台计算机上运行npm install
?
我在Centos 6 x64计算机上成功执行npm install
,将包含node_modules
的应用程序复制到Centos 7 x64计算机上。该应用程序似乎运行良好。即使它对我有用,这通常是安全的吗?
答案 0 :(得分:5)
是否始终建议在每台计算机上运行npm install?
可能是这样,因为这是包管理器的目的之一,可以轻松地跨机器维护包。
话虽如此,没有什么可以阻止你直接在其他地方复制node_modules
。实际上,在您希望将项目添加到脱机的计算机的情况下,这可能是必要的。从技术上讲,您甚至可以将它们复制到甚至没有npm
的计算机上。从节点的角度来看,如果node_modules
存在,它将找到它的依赖关系。
这样做通常是否安全?
嗯,安全问题并非真正在复制node_modules
而不是重新安装它们。更重要的问题是了解所有依赖项的安全隐患,并在确认它们是安全的时,将它们锁定到package.json
中的特定版本。这样你就可以确保每个npm install
安装相同的代码*(假设npm
本身没有做一些时髦的事情,但这总是一个信任问题)
*即使您修复了package.json
文件中的版本,仍然可能发生中断。例如,您依赖的项目与特定版本本身的依赖关系取决于具有版本范围的另一个包。
这意味着,从技术上讲,这些其他软件包的作者可以添加不再支持您的节点版本的代码,或者引入错误或修复您实际依赖的错误等。
如果您知道您的依赖项是安全的并且您100%希望将其保留,请复制node_modules
文件夹并断开与互联网的连接:)