[英]Excessive Recursion of Node.js Project Dependencies
因此,经过一整天的工作后,我坐下来,在系统托盘中看到Windows SkyDrive的警报:
Files can't be uploaded because the path of this file or folder is too long. Move the item to a different location or shorten its name.
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\grunt-contrib-nodeunit\node_modules\nodeunit\node_modules\tap\node_modules\runforcover\node_modules\bunker\node_modules\burrito\node_modules\traverse\example\stringify.js
……有一段时间,我嘲笑这种技术局限性。
但是然后,我想知道:是否真的需要Node项目中的目录递归数量? 似乎超出"angular-app\\server\\node_modules"
的路径只是整个项目的依赖项,可能更好地表示为:
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\grunt-contrib-nodeunit\
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\nodeunit\
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\tap\
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\runforcover\
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\bunker\
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\burrito\
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\traverse\
我以前并没有真正考虑过,因为与许多平台相比,Node中的软件包管理似乎很神奇。
我可以想象某些大型Node.js项目甚至包含许多重复的模块(具有相同或相似的版本),这些模块可以合并为较少的数量。 可以说:
由于重复依赖性而导致存储和传输的数据量增加,这增加了开发软件的成本。
较浅的目录结构(尤其是在这种情况下)通常更易于浏览和理解。
过长的路径名可能会在某些计算环境中引起问题。
我提议的(如果不存在这样的事情)是一个Node模块,该模块:
递归扫描Node项目,收集嵌套的node_modules
文件夹的列表以及它们相对于项目根的埋入深度。
将每个嵌套的node_modules
文件夹的内容移动到主node_modules
文件夹,编辑每个.js
文件的require()
调用,以使引用不中断。
处理重复依赖项的多个版本
如果没有别的,那将是一个有趣的实验。 你们有什么感想? 我可能会遇到哪些潜在问题?
请参阅fenestrate , npm-flatten , flatten-packages , npm重复数据删除和多阶段安装 。
从这个StackOverflow问题中引用Sam Mikes:
默认情况下,npm将在安装时添加重复数据删除功能。 这远比更换Node的模块系统更可行,但是仍然不完全是琐碎的事,并且涉及许多对某些根深蒂固的模式的重新设计。
(最终)这是当前在npm的作品,名称为
multi-stage-install
,目标是npm@3
。npm
开发负责人Forrest Norvell将在新的一年中花一些时间在Windows上运行,因此请务必在npm
问题跟踪器上创建与Windows有关的问题< https://github.com/npm/npm/issues >
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.