javascript - Node.js 项目依赖的过度递归

标签 javascript node.js recursion npm onedrive

经过一整天的工作后,我坐下来,在系统托盘中看到 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 

...有一段时间,我 mock 这种技术限制。

但是,我想知道: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文档here

关于javascript - Node.js 项目依赖的过度递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22138182/

相关文章:

javascript - JQuery Ajax限制深度递归 "too much recursion"

for循环内的Javascript递归函数

javascript - 空字符串应为 'false'

javascript - JSON从js到MVC Controller

node.js - 如何在node js中获取当前用户的个人资料

javascript - 使用 await 在 try/catch block 中声明一个 const

javascript - NodeJS session 认证

javascript - foreach 绑定(bind)中的 Owl 轮播和 knockout.js 绑定(bind)

javascript - 使用 promise 在 Angular Directive(指令)中检索数据

java - 按字段递归对对象的 ArrayList 进行排序