繁体   English   中英

Node.js项目依赖关系的过度递归

[英]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()调用,以使引用不中断。

  • 处理重复依赖项的多个版本

如果没有别的,那将是一个有趣的实验。 你们有什么感想? 我可能会遇到哪些潜在问题?

看看

npm dedupe

设置正确。

API文档在这里

请参阅fenestratenpm-flattenflatten-packagesnpm重复数据删除多阶段安装

这个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM