公開されてるnpmのpackage.jsonを取得したい時はpackage-jsonが便利
はじめに
Node.jsで、指定したnpmの情報が欲しいタイミングがあり、公開されているnpmのpackage.jsonを取得する方法を調べたらpackage-json
というパッケージが簡単で良さそうだったので紹介します。
package-jsonとは
パッケージ名の通りpackage.jsonの情報を取得するためのパッケージで、レジストリに公開されているpackage.jsonを取得できます。パッケージバージョンの指定やプライベートレジストリでの使用なども可能なので、npm関連のメンテナンスツールを作る時に使えそうです。
(ただし、package-json
のググラビリティが低いので、とにかく検索しにくい。)
インストール
package-json
をnpmやyarnでインストール。
npm install package-json
# or yarn add package-json
公開されているnpmのpackage.jsonを取得してみる
試しにReactのpackage.jsonを取得してみます。
今回は、例としてindex.js
という名前で次のファイルを作成します。
// index.js
const packageJson = require('package-json')
packageJson('react').then((result) => {
console.log(result)
})
ファイルを作成できたらターミナルでnode index.js
を実行して、先ほどのindex.js
を実行します。すると以下のようにversion
やdependencies
などの、package.jsonの情報が取得できていることがわかります。
node index.js
{
name: 'react',
version: '16.13.1',
dependencies: {
'loose-envify': '^1.1.0',
'object-assign': '^4.1.1',
'prop-types': '^15.6.2'
},
dist: {
integrity: '...',
shasum: '...',
tarball: 'https://registry.npmjs.org/react/-/react-16.13.1.tgz',
fileCount: 10,
unpackedSize: 203944,
'npm-signature': '...'
},
engines: {
node: '>=0.10.0'
}
}
ただし、repository
など取得できていない項目があります。package-json
はデフォルトでpackage.jsonの全ての情報を返すのではく、最低限の情報のみを返します。全ての項目が欲しい場合はfullMetadata
オプションを使用してください。
const packageJson = require('package-json')
packageJson('react', {
fullMetadata: true
}).then((result) => {
console.log(result)
})
パッケージのバージョンを指定する
package-json
はデフォルトでパッケージの最新版を参照しますが、version
バージョンを指定することもできます。例えば、TypeScriptの3.7の最新マイナーバージョンを取得したい場合は次のように指定できます。
packageJson('typescript', {
version: '3.7'
}).then((result) => {
console.log(result)
})
バージョンの詳しい指定方法は、こちらを参照してください。
プライベートレジストリで使う
人によっては会社のプライベートレジストリなどを使用している場合もあると思います。package-json
はデフォルトで.npmrc
のregistry
を参照するため、プライベートレジストリであっても.npmrc
にレジストリの情報が記載されていればそのまま使用可能です。
.npmrc
に設定されていないレジストリのpackage.jsonを取得したい場合は、registryUrl
オプションを設定することで可能です。
packageJson('react', {
registryUrl: 'https://my-registry-url.example.com'
}).then((result) => {
console.log(result)
})
まとめ
- そこまで出番は多くないけど、npm関連のメンテナンスツールとか作る時に便利そう。
- バージョンの指定やプライベートレジストリでの使用もサポートされている。