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:

arduino 复制代码
npm install -g vlt
# vlt目前在Node版本20或22上支持。

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

提供各种客户端 CLI 命令:

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

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

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

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

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

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

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

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

css 复制代码
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 官方网站: www.vlt.sh/client

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

github.com/thechangelo...

相关推荐
哑巴语天雨17 分钟前
React+Vite项目框架
前端·react.js·前端框架
初遇你时动了情30 分钟前
react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由
前端·javascript·react.js
乔峰不是张无忌3301 小时前
【HTML】动态闪烁圣诞树+雪花+音效
前端·javascript·html·圣诞树
鸿蒙自习室1 小时前
鸿蒙UI开发——组件滤镜效果
开发语言·前端·javascript
m0_748250741 小时前
高性能Web网关:OpenResty 基础讲解
前端·openresty
前端没钱1 小时前
从 Vue 迈向 React:平滑过渡与关键注意点全解析
前端·vue.js·react.js
NoneCoder2 小时前
CSS系列(29)-- Scroll Snap详解
前端·css
无言非影2 小时前
vtie项目中使用到了TailwindCSS,如何打包成一个单独的CSS文件(优化、压缩)
前端·css
我曾经是个程序员2 小时前
鸿蒙学习记录
开发语言·前端·javascript
羊小猪~~2 小时前
前端入门之VUE--ajax、vuex、router,最后的前端总结
前端·javascript·css·vue.js·vscode·ajax·html5