node.js - 在不安装的情况下检索有关已安装 npm 包的名称和信息
问题描述
我正在尝试找到一种方法来以编程方式检索有关 npm 兼容节点包的信息 - 特别是它的名称和 peerDependencies。
我正在构建一个命令行工具,它接受将直接传递给 npm install 的包名称。因此,正常的 npm 包名称(如lodash
)可以正常工作,GitHub URL(如lodash/lodash#1234567
工作)和本地文件路径(如工作)/my/path/to/a/package
也可以工作。
这使得检索已安装包的名称变得很困难,因为输入首先由 npm 解析,然后将生成的依赖项名称写入 package.json 文件。
我想问一下是否有一种编程方式来检索与从命令行运行 npm install 包的用户兼容的 npm 包的信息,即提供以下功能:
- 从公共和私有注册表中解析 npm 包(带有各种标签变体,例如
package@next
) - 解决 GitHub 依赖项(包括所有变体,例如提交哈希或标签)
- 解析 tarball URL
- 解析文件夹或 tarball 中的本地包
我已经尝试过的事情:
- 使用
pacote
-> 默认情况下它不使用存储在 ~/.npmrc 中的身份验证- 就包和依赖大小而言,这也是一个非常昂贵的依赖
- 解析 npm 的安装日志(使用 --json)-> 未记录并且似乎随 v7 更改为不再包含已安装依赖项的名称
- 尝试通过导入全局模块直接使用 npm
- 没有关于安装过程的可解析信息
- 导入全局模块也可能很不稳定,并且本地 npm 依赖项在大小方面会非常昂贵
- 使用/解析 npm show -> 不适用于 GitHub URL 或本地包/tarball
我现在在做什么:
我在安装之前和安装之后解析 package.json 并获取依赖项的差异(应该只有一个)。然后,此依赖项是解析后的名称,我可以使用它来导入 package.json 并检索 peerDependencies 列表。
但这感觉很 hacky,我仍然必须安装包才能获得我需要的信息。
因此,我想问是否有人有更好的想法来解决这个问题。
解决方案
推荐阅读
- gremlin - 如何在 gremlin 查询的 has 步骤中测试布尔属性的值?
- batch-file - 在匹配的字符串之后读取下一行并将值分配给变量
- ruby-on-rails - 如何在 has_many 中为用户分配角色:通过控制台的关系?
- c# - 网站用户填写后保存pdf到数据库
- javascript - 通过映射到子 html 元素来呈现响应数据...使用 React 和更新状态
- java - 为我的程序实现一个数据结构
- r - R:遍历列,从列中选择值并将其写入同一行的新列
- f# - 初始化 Azure Cosmos DB 连接和 upsert 数据
- angular - 如何使用纯管道仅在从数组 Angular 添加/删除单个对象时触发重新渲染?
- c# - Mono 发行版中的 C# 编译器版本是否与 Mono 版本相同?