部署nodejs应用程序的最佳实践是什么?
1)直接将node_modules文件夹从开发服务器移动到生产服务器,这样也可以在生产中创建相同的本地环境。无论远程对任何节点模块所做的更改都不会影响我们的代码。
2)在package.json的帮助下,在生产服务器中运行S n = 0
命令。问题在于,节点模块中的任何更改都会影响我们的代码。我遇到了环回模块(issue link)的一些问题。
任何人都可以帮助我吗?
答案 0 :(得分:6)
在生产服务器中运行npm install
无法在某些情况下完成(缺少编译工具,限制互联网访问等...),如果您必须在多台计算机上部署同一项目,则可以是浪费cpu,内存和带宽。
您应该在具有相同库和生产服务器节点版本的计算机上运行npm install --production
,压缩node_modules并在生产服务器上部署。您还应该保留package-lock.json
文件以查明版本。
此方法还允许您使用开发包构建/测试代码,然后在实际部署之前修剪node_modules。
答案 1 :(得分:1)
我的猜测是,通过提出这个问题,您并不真正理解package.json
文件的重点。
package.json文件明确用于此目的(并上传到npm注册表),传输节点包而不必随之传输大量的依赖项。
我甚至会说,永远不会手动移动node_modules
目录。
绝对在生产服务器上使用npm install
命令,这是正确的方法。要避免与本地环境相比对node_modules
目录进行任何更改,请使用package lock
文件。这应该有助于最大限度地减少node_modules
中对源代码的更改。
我的意思是说这个没有坏意图
答案 2 :(得分:1)
答案 3 :(得分:1)
npm install
可能会破坏版本依赖性。 npm ci
。它使用package_lock文件并安装所需的依赖项,而无需修改版本。
npm ci用于持续集成项目。 LINK 答案 4 :(得分:0)
我是ASP.NET Core开发人员,但是最近我开始使用Node.js应用程序。对我来说,这是您提到的将node_modules
文件夹移至生产环境的挑战之一。我没有找到整个文件夹,也没有在生产服务器上只运行npm install
命令,而是想出了一种方法,尝试使用Webpack
将Node.js应用程序捆绑为一个/多个捆绑包,并且我只是摆脱了管理node_modules
文件夹的麻烦。它只会提取我的应用程序中正在使用/引用的必需的node_modules程序包,并将其与我的应用程序代码捆绑在一起,并在不移动整个node_modules文件夹的情况下将该单个文件部署到生产环境中。
我发现这种方法对我来说很有用,但是如果这不是关于应用程序性能的正确方法,或者这种方法有什么弊端,请提出建议。