当前位置: 首页 > 知识库问答 >
问题:

如何从yarn.lock了解当前安装的软件包的版本

曹乐意
2023-03-14

我正在编写一个内部工具,该工具比较项目中安装的版本,只允许传递某些版本。为此,我必须检查在yarn.lock文件中解析的版本,因为package.json文件具有semver范围,而不是特定版本,并且它无论如何都不会告诉您依赖项的依赖关系。

我尝试使用<code>纱线列表--json似乎是唯一的方法。我知道<code>的故事。lock可能有同一软件包的不同版本,在这种情况下,我只需要安装的版本。节点_node(必须是其中之一)。但我不知道如何解析锁文件。

我能想到的另一种方法是进入< code>node_modules文件夹并检查包的< code>package.json中的版本。

上面的选项对我来说都不干净。有没有任何方法可以让我尽可能轻松、干净地知道特定软件包的解析版本(前提是我知道软件包的名称并知道它已安装)?

更新:
我实际上想要已安装软件包的所有版本(即使它们确实在依赖关系树中很深)。

共有3个答案

鲁鸿朗
2023-03-14

对于程序化使用,我喜欢纱线列表

yarn list --pattern lodash --depth=0 --json --non-interactive --no-progress | jq -r '.data.trees[].name'
lodash@4.17.21
lodash.defaults@4.2.0
lodash.flatten@4.4.0
lodash.isarguments@3.1.0
lodash.memoize@3.0.4

为了更好地使用编程:https://www.npmjs.com/package/@yarnpkg/lockfile

能文华
2023-03-14

我发现< code>yarn why是找出当前安装的软件包版本的最好方法(感谢我的一位同事给我指出了这一点)。这是我的测试代码在JavaScript中的样子。

const { spawnSync } = require('child_process');
const packageName = 'micromatch';
const whyBuffer = spawnSync('yarn', ['why', packageName]);
const grepBuffer = spawnSync('grep', ['Found'], { input: whyBuffer.stdout });
const outputArray = grepBuffer.stdout.toString().split('\n');
console.log(outputArray); // ['info \r=> Found "micromatch@3.1.10"',    'info \r=> Found "fast-glob#micromatch@4.0.2"', ''  ]
const parsedOutputArray = outputArray.filter(output => output.length > 0).map((output) => output.split('@')[1].replace('"', ''))
console.log(parsedOutputArray); // [ '3.1.10', '4.0.2' ]
杜霍英
2023-03-14

由于您知道包的名称,因此请执行以下操作:

yarn list --pattern <package_name>

上面的命令会让你得到一个包在任何深度的所有安装版本。例如,我在不同的深度安装了不同版本的< code>camelcase库。运行命令:< code > yarn list-pattern " camel case " 时,输出如下:

yarn list v1.22.5
├─ camelcase@6.2.0
└─ yargs-parser@13.1.2
   └─ camelcase@5.3.1
 类似资料:
  • 问题内容: 我使用nvm下载节点v0.4.10,并安装了npm以与该版本的节点一起使用。 我正在尝试使用安装Express 我得到一个错误,表示需要节点版本> = 0.5.0。 好吧,这很奇怪,因为我遵循的是这里使用节点v0.4.10 的node + express + mongodb教程的说明,因此我假设express可用于节点v0.4.10。如果我的假设是正确的,我如何告诉npm获取适用于我的

  • 问题内容: 我刚刚将软件包的新版本上传到PyPi(1.2.1.0-r4):我可以下载egg文件并使用easy_install进行安装,并且该版本可以正确检出。但是,当我尝试使用pip进行安装时,它将安装版本1.1.0.0。即使我明确指定要使用的版本,也会收到以下消息:,但我不明白为什么。 我仔细检查并确认1.2.1上的版本字符串大于1.1.0上的版本字符串,如下所示: 那么,为什么要选择安装1.1

  • 问题内容: 使用pip,可以确定当前安装了哪个版本的软件包? 我知道,但是我想知道是否有类似的东西。如果不是,最好的方法就是告诉我当前使用的版本。 问题答案: 从pip 1.3开始,有一个命令。 在旧版本,并应做的工作很好。

  • 问题内容: 我是一个有点新的和一般的。 我已经在服务器以及本地开发环境上设置了virtualenv。 在服务器上,程序包运行良好。 但是,在我的本地计算机上似乎根本无法正常工作。 我通常只是像这样在virtual-env中安装它: 不过,这会获得最新版本,这是第一次导致使用最新版本的问题。 所以我像这样卸载了版本5 alpha: 但是现在我不知道如何再次获得工作版本0.4.0 Beta。我试过了,

  • 问题内容: 我正在尝试使用Composer安装软件包的特定版本。我尝试过,但是他们正在安装软件包的最新版本。如果我想要旧版本怎么办? 问题答案: 例如: