私はこのプロジェクトにインストールされたバージョンを比較し、唯一の特定のバージョンを渡すことを可能にする内部ツールを書いています。私は解決されたバージョンをチェックする必要があることについてはyarn.lock
package.jsonファイルがsemver範囲を持っているとして、ファイルを、いない特定のバージョンと、それはとにかくあなたの依存関係の依存性を教えてくれありません。
私が使ってみましたyarn list
コマンドを、それはあまりにもsemver範囲を印刷し、(さえして解析することは非常に困難である--json
オプション)。だから、yarn.lock
唯一の方法のように思えます。私は知っているyarn.lock
同じパッケージの別のバージョンを有していてもよく、その場合には、私はにインストールされているバージョンのみをしたい。node_nodules
(ただそれらの一方でなければなりません)。私はかかわらず、ロックファイルを解析する方法が分かりません。
私は考えることができ別の方法は、実際に起こっているnode_modules
フォルダとでバージョンチェックpackage.json
パッケージのを。
上記のオプションのどれも私にはきれいに見えません。私は簡単に(私はパッケージの名前を知っていると私はそれがインストールされていますことを知っていて)、特定のパッケージの解決されたバージョンを知っていて、きれいにできる限りすることができます方法はありますか?
アップデート:
私は実際に(彼らは本当に深い依存関係ツリー内方にも)インストールされたパッケージのすべてのバージョンを望んでいました。
私はそれが分かったyarn why
パッケージ(私に指摘して、私の同僚の1のおかげで)の現在インストールされているバージョンを見つけるための最良の方法です。これは私のテストコードを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 "[email protected]"', 'info \r=> Found "fast-glob#[email protected]"', '' ]
const parsedOutputArray = outputArray.filter(output => output.length > 0).map((output) => output.split('@')[1].replace('"', ''))
console.log(parsedOutputArray); // [ '3.1.10', '4.0.2' ]