所以经过漫长的一天工作后,我坐下来看到系统托盘中的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_modules
文件夹列表,以及它们与项目根目录相关的深度。
将每个嵌套node_modules
文件夹的内容移动到主node_modules
文件夹,编辑每个require()
文件的.js
次调用,以防止任何引用被破坏
处理多个版本的重复依赖项
如果不出意外的话,那将是一个有趣的实验。你们有什么感想?我可能会遇到哪些潜在的问题?
答案 0 :(得分:1)
答案 1 :(得分:0)
请参阅fenestrate,npm-flatten,flatten-packages,npm dedupe和multi-stage-installs。
从this StackOverflow question引用Sam Mikes:
npm默认会在安装时添加重复数据删除时间。这比Node的模块系统更改更加可行,但它仍然不是很简单,并且需要对一些长期存在的模式进行大量的重新设计。
这是(最终)目前正在npm工作,名称为
multi-stage-install
,目标是npm@3
。npm
开发负责人Forrest Norvell将在新的一年中花一些时间在Windows上运行,因此请在npm
问题跟踪器上创建与Windows相关的问题< https://github.com/npm/npm/issues>