qnm

Recent posts

https://github.com/ranyitz/qnm

node_modules配下のパッケージを検索してくれるツール。 npm ls よりちょっとリッチな感じかも。

fuzzy search

qnmコマンドでスタート。

qnm
❯ angula 

❯ @angular/cdk
 @angular/cli
 @angular/core
 @angular/fire
 @angular/forms
 @angular/router
 ...

大文字小文字を区別しない。

qnm
❯ anGuLAR 

❯ @angular/cli
 @angular/cdk
 @angular/core
 @angular/fire
 @angular/forms

list

--deps を付けると、該当パッケージの依存元がわかる。

qnm list --deps

@babel/runtime
└── 7.18.9

@babel/template
├── 7.18.10
├─┬ @babel/helper-function-name
│ └── 7.21.9
├─┬ @babel/helper-module-transforms
│ └── 7.21.9
├─┬ @babel/helper-replace-supers
│ └── 7.21.9
├─┬ @babel/helpers
│ └── 7.21.9
└─┬ @babel/plugin-transform-computed-properties
  └── 7.21.9

package-lock.json を見ると helper-function-name が確かに依存している。

  794     "node_modules/@babel/helper-function-name": {
  795       "version": "7.21.0",
  796       "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
  797       "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
  798       "dev": true,
  799       "dependencies": {
  800         "@babel/template": "^7.20.7",
  801         "@babel/types": "^7.21.0"
  802       },

lodash は依存元がなかった。

lodash
└── 4.17.21

package-lock.json を見ると inquirer が依存している。 依存の深いネストは表示されない?

 6631     "node_modules/inquirer": {
 6632       "version": "8.2.4",
 6633       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz",
 6634       "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==",
 6635       "dev": true,
 6636       "dependencies": {
 6637         "ansi-escapes": "^4.2.1",
 6638         "chalk": "^4.1.1",
 6639         "cli-cursor": "^3.1.0",
 6640         "cli-width": "^3.0.0",
 6641         "external-editor": "^3.0.3",
 6642         "figures": "^3.0.0",
 6643         "lodash": "^4.17.21",

関係あるか分からないけど babel/template は大元の babel の requires に列挙されている。

12407     "@babel/core": {
12408       "version": "7.18.10",
12409       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz",
12410       "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==",
12411       "dev": true,
12412       "requires": {
12413         "@ampproject/remapping": "^2.1.0",
12414         "@babel/code-frame": "^7.18.6",
12415         "@babel/generator": "^7.18.10",
12416         "@babel/helper-compilation-targets": "^7.18.9",
12417         "@babel/helper-module-transforms": "^7.18.9",
12418         "@babel/helpers": "^7.18.9",
12419         "@babel/parser": "^7.18.10",
12420         "@babel/template": "^7.18.10",
12421         "@babel/traverse": "^7.18.10",
12422         "@babel/types": "^7.18.10",
12423         "convert-source-map": "^1.7.0",
12424         "debug": "^4.1.0",
12425         "gensync": "^1.0.0-beta.2",
12426         "json5": "^2.2.1",
12427         "semver": "^6.3.0"
12428       },
12429       "dependencies": {
12430         "semver": {
12431           "version": "6.3.0",
12432           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
12433           "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
12434           "dev": true
12435         }
12436       } 

package-lock.json の dependencies と requires

  • requires: package.json の依存を反映したもの。
  • dependencies: 実際にインストールされたもの。

パッケージ X と Y がそれぞれ Z の異なるバージョンを要求する時、Z の複数バージョンがインストールされる。 このような時に要求される依存と実際のインストールが異なる。

node_modules
    /X
    /Y
        /node_modules
            /Z@2.0
    /Z@1.0

https://stackoverflow.com/questions/52926922/package-lock-json-requires-vs-dependencies

その他

Angular + Scully では qnm list が実行できなかった。 そもそも依存パッケージが古いのでアップデートしてまた試す。

nvmには対応していない様子。グローバル node_modules は読み込んでくれなかった。惜しい。