52

https://www.npmjs.com/での検索の順序と表現力に満足できないことがよくあります。https://api.npmjs.org/またはhttp://registry.npmjs.org/を使用してプログラムでサーバーにクエリを実行する方法が必要だと思います。しかし、どのように?ドキュメントはどこにありますか?

(または、それを容易にするノードパッケージはありますか?SOはツールやパッケージの推奨事項に関するものではないことを知っているので、おそらくこれについても質問するべきではありませんが、ツールがあれば、そこからAPIを読み取ることができます同じように。)

4

10 に答える 10

24

もちろん、そのレジストリと対話するように設計されたツールが少なくとも 1 つあります。それがnpmコマンド ライン ツールそのものです。たとえば、その検索は、ローカルにキャッシュされたインデックスのコピーを更新し、それをフィルタリングすることから始まります。update-indexでは、で終わる URL/-/all が明らかに特殊であることが読み取れます。実際、それをregistry.npmjs.org(意図的にリンクとしてフォーマットされていない) に追加すると、125M のファイルがフェッチされ、ブラウザーには大きすぎる可能性があります。幸いなことに、キャッシュされたバージョンは に保存されています~/.npm/registry.npmjs.org/-/all/.cache.json。そこから、すべての nown パッケージのリストを読み取ることができます。次に、そのような各パッケージをさらに詳細に照会し続けることができます。

これ以上精巧なスキームを使用していないように見えるという事実npm searchは、ここにサーバー側の API があまりないことを示唆しています。

言及しているページを Web で検索すると、そこからダウンロード数api.npmjs.orgを取得できることがわかりました。私が見つけた他のすべてのドキュメントは、その単一の機能を利用しています。

代替手段を探していると、npmsearch.comにも出会いました。これは、より用途の広い検索機能を提供し、ある程度文書化された APIを備えています。

于 2015-12-03T21:43:34.640 に答える
23

https://skimdb.npmjs.com/registry/_all_docs

これは、すべてのパッケージ名をプルする現在の方法です。

URL検索はhttp://registry.npmjs.com/-/v1/search?text=<searchstring>&size=20

Edit1: 3 年後 (2021 年 3 月)、このエンドポイントは引き続き機能します。それがまだ人々に役立つことを嬉しく思います:)

于 2018-03-28T18:59:21.337 に答える
19

いつでも NPM レジストリ クライアントを使用できます: https://github.com/npm/npm-registry-client

これを調べると、API のエンドポイントを取得できます。たとえば、パッケージの dist-tags を取得するには、/-/package/packageName/dist-tags' に移動できます

したがって、babel-core の dist タグを取得するには、http://registry.npmjs.org/-/package/babel-core/dist-tagsにアクセスします。

于 2016-05-10T10:03:51.737 に答える
14

パッケージが見つからない場合、または単にシェル スクリプトをハッキングしている場合は、レジストリのgit リポジトリにあるレジストリ API ドキュメントに、検索 API と検索修飾子に関する詳細情報が含まれています。

パブリック レジストリで最も人気のある安全でないパッケージを探している場合は、次のコマンドを実行します。

wget -qO - "http://registry.npmjs.com/-/v1/search?text=is:insecure&popularity=1.0&size=1"

上記は、is:insecure追加のテキスト条件なしで検索修飾子を使用し、 (最も人気のある)size=1場所で結果を取得します。popularity=1.0

docsリポジトリのディレクトリをチェックインして、次のような他の多くの便利なものを確認してください。

于 2018-07-31T10:04:12.000 に答える
6

公式のパブリック NPM レジストリ API のドキュメントは、次の GitHub リポジトリにあります: https://github.com/npm/registry

検索エンドポイントのドキュメントは、https ://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get-v1search にあります。

次のクエリ パラメータが受け入れられます: テキスト、サイズ、品質、人気、メンテナンス

curl -sL 'https://registry.npmjs.org/-/v1/search?text=react-native&size=5' | jq

ここではcurl、API リクエストを作成しjq、JSON レスポンスをフォーマットするために使用しています。次の出力が返されます。

{
  "objects": [
    {
      "package": {
        "name": "react-native",
        "scope": "unscoped",
        "version": "0.62.2",
        "description": "A framework for building native apps using React",
        "date": "2020-04-08T17:08:19.985Z",
        "links": {
          "npm": "https://www.npmjs.com/package/react-native",
          "homepage": "https://github.com/facebook/react-native#readme",
          "repository": "https://github.com/facebook/react-native",
          "bugs": "https://github.com/facebook/react-native/issues"
        },
        "publisher": {
          "username": "react-native-bot",
          "email": "opensource+react-native-bot@fb.com"
        },
        "maintainers": [
          {
            "username": "cpojer",
            "email": "christoph.pojer@gmail.com"
          },
          {
            "username": "fb",
            "email": "opensource+npm@fb.com"
          },
          {
            "username": "grabbou",
            "email": "grabbou@gmail.com"
          },
          {
            "username": "hectorramos",
            "email": "hector@hectorramos.com"
          },
          {
            "username": "react-native-bot",
            "email": "opensource+react-native-bot@fb.com"
          }
        ]
      },
      "flags": {
        "unstable": true
      },
      "score": {
        "final": 0.4604636166574407,
        "detail": {
          "quality": 0.5886895871400879,
          "popularity": 0.47768592528213616,
          "maintenance": 0.3333333333333333
        }
      },
      "searchScore": 100000.47
    },
    {
      "package": {
        "name": "react-native-svg",
        "scope": "unscoped",
        "version": "12.1.0",
        "description": "SVG library for react-native",
        "keywords": [
          "react-component",
          "react-native",
          "ios",
          "android",
          "SVG",
          "ART",
          "VML",
          "gradient"
        ],
        "date": "2020-04-09T23:50:28.358Z",
        "links": {
          "npm": "https://www.npmjs.com/package/react-native-svg",
          "homepage": "https://github.com/react-native-community/react-native-svg",
          "repository": "https://github.com/react-native-community/react-native-svg",
          "bugs": "https://github.com/react-native-community/react-native-svg/issues"
        },
        "publisher": {
          "username": "msand",
          "email": "msand@abo.fi"
        },
        "maintainers": [
          {
            "username": "brentvatne",
            "email": "brentvatne@gmail.com"
          },
          {
            "username": "dustin.savery",
            "email": "dustin.savery@gmail.com"
          },
          {
            "username": "magicismight",
            "email": "master@horcrux.cn"
          },
          {
            "username": "msand",
            "email": "msand@abo.fi"
          }
        ]
      },
      "score": {
        "final": 0.5244501419238121,
        "detail": {
          "quality": 0.9582364654638059,
          "popularity": 0.34375010176572474,
          "maintenance": 0.3333333333333333
        }
      },
      "searchScore": 0.031369504
    },
    {
      "package": {
        "name": "react-native-device-info",
        "scope": "unscoped",
        "version": "5.6.1",
        "description": "Get device information using react-native",
        "keywords": [
          "react-component",
          "react-native",
          "ios",
          "android",
          "windows",
          "device",
          "events",
          "cocoapod"
        ],
        "date": "2020-05-27T18:33:11.715Z",
        "links": {
          "npm": "https://www.npmjs.com/package/react-native-device-info",
          "homepage": "https://github.com/react-native-community/react-native-device-info#readme",
          "repository": "https://github.com/react-native-community/react-native-device-info",
          "bugs": "https://github.com/react-native-community/react-native-device-info/issues"
        },
        "author": {
          "name": "Rebecca Hughes",
          "email": "rebecca@learnium.net",
          "url": "https://github.com/rebeccahughes"
        },
        "publisher": {
          "username": "mikehardy",
          "email": "npmjs@mikehardy.net"
        },
        "maintainers": [
          {
            "username": "gantman",
            "email": "gantman+npm@gmail.com"
          },
          {
            "username": "jeroenbourgois",
            "email": "info@jeroenbourgois.be"
          },
          {
            "username": "lilach",
            "email": "i.am.red@gmail.com"
          },
          {
            "username": "machour",
            "email": "machour@gmail.com"
          },
          {
            "username": "rebeccahughes",
            "email": "rebeccahughes1@outlook.com"
          }
        ]
      },
      "score": {
        "final": 0.5102794746987024,
        "detail": {
          "quality": 0.9614895473985808,
          "popularity": 0.3004741251784613,
          "maintenance": 0.3333333333333333
        }
      },
      "searchScore": 0.016712856
    },
    {
      "package": {
        "name": "css-to-react-native",
        "scope": "unscoped",
        "version": "3.0.0",
        "description": "Convert CSS text to a React Native stylesheet object",
        "keywords": [
          "styled-components",
          "React",
          "ReactNative",
          "styles",
          "CSS"
        ],
        "date": "2019-10-10T17:46:00.297Z",
        "links": {
          "npm": "https://www.npmjs.com/package/css-to-react-native",
          "homepage": "https://github.com/styled-components/css-to-react-native#readme",
          "repository": "https://github.com/styled-components/css-to-react-native",
          "bugs": "https://github.com/styled-components/css-to-react-native/issues"
        },
        "author": {
          "name": "Jacob Parker"
        },
        "publisher": {
          "username": "jacobp100",
          "email": "jacobparker1992@gmail.com"
        },
        "maintainers": [
          {
            "username": "jacobp100",
            "email": "jacobparker1992@gmail.com"
          },
          {
            "username": "kristerkari",
            "email": "krister@sent.at"
          },
          {
            "username": "mxstbr",
            "email": "npm@mxstbr.com"
          }
        ]
      },
      "score": {
        "final": 0.4836548888489432,
        "detail": {
          "quality": 0.8524860977159072,
          "popularity": 0.39264581380833835,
          "maintenance": 0.25852292771786467
        }
      },
      "searchScore": 0.013077582
    },
    {
      "package": {
        "name": "react-native-elements",
        "scope": "unscoped",
        "version": "2.0.4",
        "description": "React Native Elements & UI Toolkit",
        "keywords": [
          "react-native",
          "reactjs",
          "reactnative",
          "bootstrap"
        ],
        "date": "2020-06-30T02:30:34.882Z",
        "links": {
          "npm": "https://www.npmjs.com/package/react-native-elements",
          "homepage": "https://react-native-elements.github.io/react-native-elements/",
          "repository": "https://github.com/react-native-elements/react-native-elements",
          "bugs": "https://github.com/react-native-elements/react-native-elements/issues"
        },
        "author": {
          "name": "Nader Dabit & Monte Thakkar"
        },
        "publisher": {
          "username": "flyingcircle",
          "email": "jeremyelijah@live.com"
        },
        "maintainers": [
          {
            "username": "dabit3",
            "email": "dabit3@gmail.com"
          },
          {
            "username": "iroachie",
            "email": "kroach.work@gmail.com"
          },
          {
            "username": "monte9",
            "email": "mthakkar@mail.sfsu.edu"
          }
        ]
      },
      "score": {
        "final": 0.4921277780507845,
        "detail": {
          "quality": 0.9218028296308819,
          "popularity": 0.28262932141386665,
          "maintenance": 0.3333333333333333
        }
      },
      "searchScore": 0.011005878
    }
  ],
  "total": 26290,
  "time": "Wed Jul 08 2020 05:02:14 GMT+0000 (UTC)"
}
于 2020-07-08T05:15:10.817 に答える
5

sinopia レジストリ インターフェースを見てみましょう: https://github.com/rlidwka/sinopia/blob/master/lib/index-api.js。npm クライアントのデフォルトのレジストリはhttps://registry.npmjs.orgです(コンソールで試してみてください: npm config ls -l)。したがって、反応 15.0.2 に関するデータを取得するために、(sinopia API を参照して) 以下を試すことができます。

https://registry.npmjs.org/react/15.0.2

于 2016-12-25T04:04:05.097 に答える