NPM的问题与未来

npm作为Nodejs的包管理工具,它们共同构成了一个强大的生态系统,使得JavaScript开发者能够在服务器端开发复杂的应用程序,并且能够轻松地管理和共享代码。这的确是一个壮举,而创始人居安思危,点明了这个生态系统中存在的严重问题,主要涉及以下几个方面:

  1. 架构和验证问题(manifest confusion)

    • npm 注册表没有根据相应 tarball 包的内容验证清单信息,导致元数据(manifest)和 tarball 中的 package.json 内容可能不一致。
    • 这种不一致允许攻击者隐藏脚本或依赖项,例如,一个包可能显示没有依赖项,实际上却有,或者显示的包名或版本与 package.json 中的不同。
  2. 安全性问题

    • 通过包安装脚本引入的漏洞,例如 preinstallpostinstallinstall 钩子可能执行任意代码,暴露敏感信息或允许外部控制。
    • 未授权的数据外泄,一些包被发现将敏感数据(如系统用户名、目录路径或网络配置)发送到远程服务器,这违反了用户隐私并可能被用于进一步攻击。
    • 下载和执行未经完整性检查的二进制文件可能导致恶意软件的安装。
  3. 依赖管理问题

    • 重复安装问题,由于 npm 的依赖结构,相同的包可能被多次安装,导致 node_modules 目录体积膨胀。
    • 嵌套层级过深,复杂的项目 node_modules 目录的嵌套层级可能非常深,导致路径名超出 Windows 和一些应用工具的处理范围。
  4. 版本管理问题

    • SemVer(语义化版本控制)导致依赖安装的不确定性。
  5. 缓存和离线模式问题

    • npm 的缓存能力存在问题,且没有有效的离线模式。
  6. 供应链攻击

    • 攻击者可能通过克隆或分叉包,或者在更新包时未清理过时的元数据来引入安全风险。
  7. 维护和更新问题

    • 由于维护不足,许多包依赖于已知漏洞的代码,即使在漏洞公开多年后仍然如此。

这些问题表明 npm 生态系统在安全性、依赖管理和架构设计方面存在挑战,需要社区和工具提供者共同努力来解决这些问题,以提高整个生态系统的安全性和稳定性。

在今年三月,NPM 的创建者刚刚在今年三月组建了一个创始团队,vlt technology Inc.,准备使用两款开创性的工具彻底重构该生态:

  • vlt,一款尖端的软件包管理器;
  • vsr,一款无服务器注册表,它将重新定义我们管理和分发软件包的方式。

vlt:新一代软件包管理器

vlt 不仅仅是另一款软件包管理器,它还是一款免费的开源软件,旨在简化您的开发流程。下面就是它的与众不同之处:

  • 快速安装:管理 Node.js 依赖关系时,告别漫长的等待时间。
  • 智能依赖关系查询:新的选择器语法让软件包管理变得轻而易举。
  • Visual magic:以各种格式导出依赖关系图,包括 Mermaid。
  • 直观的图形用户界面:轻松探索项目的依赖关系网络。

简单的命令安装 vlt:

npm install -g vlt
# vlt目前在Node版本20或22上支持。

安装完成后,就可以开始体验 vlt 带来的高效软件包管理体验了。

提供各种客户端 CLI 命令:

提供了几种依赖性可视化方法:

  • 可读格式:以树形结构显示数据,使嵌套关系更容易理解,帮助开发人员快速掌握依赖关系结构。

  • JSON:适用于系统间的数据交换,以可读和机器友好的方式表示信息,确保无缝数据传输。

  • Mermaid:使用 Mermaid 语法创建可视化图表,帮助开发人员显示复杂的数据流或层次结构,使依赖关系一目了然。

说明:Mermaid 是一种基于文本的图表绘制工具,支持在 Markdown 文件、文档或网页中嵌入可视化图表。通过简单的语法,用户可以快速生成流程图、时序图、甘特图等多种图表类型。

VLT 的图形用户界面(GUI)使探索和了解项目依赖关系变得更容易、更直观。

通过命令行使用以下查询语句,可以在浏览器中查看特定项目的依赖关系图:

vlt 提供功能强大的命令行工具,用于依赖性分析:

vlt query '[name="my-project"] > :is(:project > *[name="tap"][version="21.0.1"])' --view=gui

或使用以下命令启动图形用户界面仪表板

vlt gui

这将启动一个图形界面,让您更轻松地管理和分析项目的依赖关系。

vsr:下一代无服务器软件包注册中心

与 vlt 同时推出的还有 vsr,这是一个与 npm 兼容的公平源代码无服务器软件包注册表。它不仅仅是一个托管解决方案,更是一个可扩展、安全、经济高效的平台,它正在改变游戏规则:

  • 无服务器架构:轻松扩展,保持低运营成本。
  • 向后兼容:与 npm、yarn、pnpm、deno 和 bun 无缝兼容。
  • 细粒度访问控制:以前所未有的精度管理权限。
  • 灵活的托管:可选择本地开发、自托管或托管实例。

主要优势

部署方法:

  • 本地开发:适合个人或小型团队在本地环境中进行软件包管理和测试。

  • 自托管:企业或团队可在自己的服务器上部署 VSR,并控制数据和访问权限。

  • 托管服务:如果您想要更省心的解决方案,可以选择官方提供的托管服务。

  • 细粒度访问令牌:新的控制水平

vsr 引入了粒度访问令牌 (GAT),对软件包的交互进行精确控制:

  • 客户令牌(只读):非常适合第三方访问,同时不影响安全性。

  • 团队令牌(读写):无缝协作,同时保持严格的访问控制。

vsr 与竞争对手的比较:

  • vsr:擅长无服务器架构和细粒度访问控制。

  • Verdaccio:具有插件支持和多云功能。

  • JSR:支持 TypeScript 并提供详细的 API 文档。

这三款软件都涵盖了软件包发布和安装等基本功能,但 vsr 独特地融合了无服务器技术和细粒度访问控制,使其与众不同。

总结

npm 生态的发展推动了 JavaScript 的繁荣,但随之而来的安全、性能和依赖管理问题也不可忽视。为应对这些挑战,npm 的创始团队推出了全新的工具 vlt 和 vsr,试图彻底革新软件包管理和分发方式。

vlt 专注于提高开发效率,从快速依赖安装到智能依赖查询,结合强大的可视化功能和友好的图形界面,全面优化了开发者的日常体验。

与此同时,vsr 通过无服务器架构和细粒度访问控制重新定义了注册表的功能。它兼具安全性、灵活性和经济高效的特点,无缝兼容现有工具链,并为企业提供多种托管选择。

二者结合,描绘了一个更高效、更安全的包管理未来蓝图。随着这两款工具的普及,JavaScript 开发者的工作流程有望迎来新的变革。

参考资料:

VLT 官方网站: https://www.vlt.sh/client

vsr 官方网站: https://www.vlt.sh/serverless-registry

https://github.com/thechangelog/transcripts/blob/master/jsparty/js-party-282.md

本文由mdnice多平台发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,226评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,509评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,523评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,181评论 1 302
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,189评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,642评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,993评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,977评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,527评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,547评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,661评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,250评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,991评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,422评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,571评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,241评论 3 382
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,737评论 2 366

推荐阅读更多精彩内容

  • npm 是啥?JavaScript 世界的软件包管理器。它的体量有多大?大约有 1200 万开发人员使用,共提供了...
    老率的IT私房菜阅读 925评论 0 0
  • 关于版本的基础常识 -save:表示在安装的同时,将依赖包写入package.json中-dev:表示将依赖写在d...
    codingHi阅读 763评论 0 0
  • 1.npm是Node官方提供的包管理工具,他已经成了Node包的标准发布平台,用于Node包的发布、传播、依赖控制...
    shuo_fd6c阅读 2,592评论 0 0
  • 标签(空格分隔): npm和bower的区别 前端包管理器 序 前端富应用时代,写代码,基本不会从底层自己开始造轮...
    麦壳儿UIandFE2阅读 5,934评论 0 14
  • 使用NPM工具进行包管理1.通过NPM提供的npm命令来进行依赖包的下载、升级和移除2.通过package.jso...
    LRachel阅读 1,187评论 0 4