我可以复制“node_modules”目录到其他机器,而不必每次都运行“npm install”吗?

两台Linux机器。 两者都是CentOS x64,但版本不同。

假设我在机器#1上运行npm install ,将包括node_modules目录在内的整个应用程序复制到机器#2并在那里运行。 是否支持? 或者,总是build议在每台机器上运行npm install

我成功地在Centos 6 x64机器上执行npm install ,将包括node_modules的应用程序复制到Centos 7 x64机器上。 应用程序似乎运行良好。 即使它对我有用,这样做通常是安全的吗?

总是build议在每台机器上运行npm install?

可能是这样,因为这是一个包pipe理器的目的之一,就是在机器间轻松地维护你的包。

话虽如此,没有什么是阻止你直接复制node_modules别的地方。 事实上,如果您想将项目添加到脱机的机器,这可能是必要的。 从技术上讲,你甚至可以将它们复制到一台甚至没有npm的机器上。 从节点的angular度来看,如果node_modules存在,它将find它的依赖关系。

这通常是安全的吗?

那么,安全问题并不是在复制node_modules而是在重新安装它们。 更重要的问题是了解所有依赖关系的安全影响,并在确认安全性时将其locking到package.json特定版本。 这样你就可以确保每一个npm install安装相同的代码*(假设npm本身没有做一些奇怪的事情,但这总是一个信任问题)

*即使您在package.json文件中修复了版本,仍然有可能发生中断。 例如,依赖于某个特定版本的项目依赖于另一个具有版本范围的包。 这意味着从技术上来说,这些其他软件包的作者可以添加不再支持您的节点版本的代码,或者引入错误或修复您实际依赖的错误等。

如果您知道您的依赖关系是安全的,并且您100%希望以这种方式离开它们,请复制node_modules文件夹并断开与Internet的连接:)

这里有一个很好的相关阅读 。