node.js - 如何在 Windows 上部署具有深度 node_modules 结构的 Node.js 应用程序?

标签 node.js windows deployment npm filenames

我遇到了一个奇怪的问题 - 显然某些 Node.js 模块具有如此 文件夹层次结构 以至于 Windows 复制命令(或 PowerShell 的 Copy-Item 这是我们实际使用的)当路径长度超过 250 个字符时会遇到臭名昭著的“路径太长”错误。

例如,这是单个 Node 模块可以创建的文件夹层次结构:

node_modules\nodemailer\node_modules\simplesmtp\node_modules\
xoauth2\node_modules\request\node_modules\form-data\node_modules\
combined-stream\node_modules\delayed-stream\...

这看起来很疯狂,但却是 Node 模块的现实。

我们需要在部署期间使用复制粘贴(我们没有使用像 Heroku 这样可以选择 Git 部署的“聪明”目标平台),这对 Windows 来说是一个严重的限制。

是否有一个 npm 命令或可以压缩 node_modules 文件夹或仅包含运行时实际需要的内容?( Node 模块通常包含 test 文件夹等,我们不需要部署。)还有其他想法如何解决它?不幸的是,不使用 Windows 不是一种选择 :)

最佳答案

只是添加到这个...帮助我的另一件事是使用 npm ls 列出所有已安装的模块。

这将为您提供模块和版本树...从那里很容易识别哪些是重复的... npm dedupe 没有为我做任何事情。我不确定这是错误还是什么(Node v 10.16)

因此,一旦您识别出重复的模块,请使用 npm install dupemodule@1.2.3 --save-dev 将其安装到根 node_module 目录。 版本很重要。

之后,我清除了我的 node_modules 目录并执行了新的 npm install

短版

  1. npm ls 获取所有已安装模块的列表。
  2. 查看这些模块并找出重复的模块(版本很重要)
  3. npm install module@version --save-dev 在根 node_modules 目录中安装这些模块并更新 package.json。
  4. rmdir node_modules 删除 node_modules 目录。
  5. npm install 下载一个新的依赖项副本。

一旦我这样做了,一切就干净多了。

我还建议您评论您的 package.json 文件,以显示哪些文件被删除以展平 node_modules 树。

关于node.js - 如何在 Windows 上部署具有深度 node_modules 结构的 Node.js 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318364/

相关文章:

c++ - 在 C 代码中安全地嵌入字符串(Secure string、Secure char*)

android - 为什么我必须先将我的应用程序发布到 google play,然后才能对其进行测试?

node.js - 在带有 node.js 的 socket.io 中,如何确定特定连接的服务器 IP?

node.js - hapi-auth-cookie 无法加载 session 策略

node.js - 我的 Controller 应该采用 (res, req) 参数还是已经提取的参数?

java - Tomcat 8.0 webapp 部署失败并出现 NullPointerException

deployment - 优雅地更新服务器代码

javascript - NodeJs 比 Clojure 快吗?

Python 列表迭代问题

windows - Windows 10 上的 Docker 启动错误 : Object reference not set to an instance of an object