私はベストから学びたかったので🚀


過去数年間、私のソフトウェア開発者の友人と私は延々と私たちが前に行っていないと新しいアプリケーションやツールの無限のストリームを学ぶ方法でシステムを設計する必要に直面している.今、私を誤解しないでください、すべてのこの進歩と多様性は素晴らしいです、そして、私はそれのあらゆるビットが好きです.それはちょうど私たちが実際の新しいグッズを学ぶために座って、次のアプリを設計するとき、我々は通常、特定の種類の情報を欠場する.もちろん、私たちにはDocsがあります、私たちにはHello Worldがあります、そして、いつかツール・リリースの後、『ネット』は媒体の公正な分け前を得ます.comの投稿、そしてそれは素晴らしい!
しかし、我々は、これらのツールやライブラリの使用方法を参照してくださいライブプロダクションシステム内の内部の大規模なアプリケーション内で、内部のモバイルアプリケーションとどのように野生の世界の問題を解決するために使用されます.メッセージングブローカーの概念使用の単純な証明を見ることは一つです.しかし、我々は常にどのようにこれらのビルディングブロックを使用してプロのマイクロサービスの群れを調整するか、またはどのようにシステムアーキテクチャに影響を与えるかを見てみたい.

では、どうやってこのアプローチを行うのですか?


私は幸運にも私は何とかつまずいたwithspectrum/spectrum repo そして、実際には、偉大なアプリケーションを実行しているインターネット上では、負荷の下でdudufully維持されている間、オープンソースされている!スペクトラムは、私のためのジュニアの開発者として私のための最も目を開か体験のいずれかに戻ってきた.私は実際にこれまでのようなシステムを構築するために持っていなかったが、それは私にこのようなアプリがどのように動作し、どのように様々なライブラリを使用することができます私に大きなことを教えた.

もっと探す


それ以来、何年もの間、私はいつもより類似したアプリの見張りをしていました、しかし、私は握りを見つけることができました.
数週間前のある夜、私は探索の努力をステップアップすることを決めた.私がオンラインで検索することが私が望んだように効果的でないと理解するまで、数時間かかりました.私は、図書館の名前やプログラミング言語で検索できるが、クエリ"find all javascript repositories with express, react and mongoose inside package.json" 大部分の結果がアプリケーションの代わりにライブラリであったので、実りませんでした.非公開ノードパッケージの問い合わせをする必要がありました.

多分、私はインデックスを作ることができます?


すべてのパッケージを取得する方法がある場合.すべてのリポジトリからJSONファイルは、すべての依存関係を検索し、一致するものをフィルタリングすることが可能になります.ありがたいことにGitHub APIは1つの優れたインターフェイスであり、運がそれを持っているように、彼らはあなたがそれを行うことができます!私は、常に他の人が恩恵を受けるサイトを作りたかったです.少しだけrxjs 私のクローラを料理することは、生まれました.
const searchGithub = () => {
  const controller$ = new BehaviorSubject(new Date("2010-01-01T00:00:00Z"));

  return controller$
    .pipe(
      takeWhile((created) => {
        if (created < new Date()) {
          return true;
        }
        return false;
      }),
      mergeMap((created) => {
        const end = add(created, { months: 1 });

        const q = Object.entries({
          created: `${created.toISOString()}..${end.toISOString()}`,
          language: "javascript",
          stars: ">=1000",
        })
          .map(([k, v]) => `${k}:${v}`)
          .join(" ");
        return octokit
          .paginate(octokit.rest.search.repos, {
            q,
          })
          .then((results) => {
            controller$.next(end);

            return results || [];
          });
      }, 1),
      concatAll()
    )
    .subscribe({
      next: (repo) => {
        // store repository information into database
      },
      complete: () => {
        console.log("Scan complete");
      },
    });
};
この観測可能性は、1000以上の星とすべてのレポを見つけ、それはJavaScriptで書かれています.唯一のしゃっくりはGithub側の制限で、一つのクエリは100ページで返すことができます.これは、リポジトリ作成日によって検索要求を分割することで克服できます.残っているのはパッケージを取り出すことだけです.JSONとインデックスを作成します.
const fetchPkgJson = (repo) => {
  return from(repo.full_name).pipe(
    mergeMap((full_name) => {
      return octokit.paginate(octokit.rest.search.code, {
        q: `repo:${full_name} filename:package extension:json`,
      });
    }, 1),
    filter((items) => items.length > 0),
    concatAll(),
    mergeMap(async (item) => {
      const { data } = octokit.request(
        "GET /repositories/{id}/git/blobs/" + item.sha,
        {
          id: item.repository.id,
        }
      );

      const stringPackageJson = Buffer.from(data.content, "base64").toString();
      return JSON.parse(stringPackageJson);
    }, 1)
  );
};
さらにいくつかの夜は、建物の反応UIを使用して、ホスティングを設定していたhttps://codelib.club -生まれ.私はそれをできるだけ簡単にしようとした-大騒ぎや気晴らし.ライブラリを検索すると、リポジトリの一覧が表示されます.つのリポジトリを開くと、パッケージのリストがあり、依存関係としてクエリを含むものが強調表示されます.また、依存性をクリックして検索するか、それが使用されている正確な場所を見つけるためにGithub検索に直接撮影することができます.

ゴールヒット/ミス比


最終的には、オープンソースのリポジトリ、ソリューション、アイデアの数に驚きました.使えますcodelib 任意の依存関係で構築されたアプリケーションを検索するには、次のようにします.
  • APIs made with express+passport
  • Apps with react+stripe

  • Services built with mongoose
    そしてもっと
  • 現在JavaScriptとTypeScriptのリポジトリから200以上の星をスキャンしているgithub.com and gitlab.com そして、私はより多くを加える予定です.まだ不足しているもの(SSR、おそらく他の言語、より良いランキングシステムなどをオンにするような)が、主なユースケースは覆われている.多分バグの数もある😁 それで、あなたが何かにつまずいて起こるならば、知らせてください.また、フィードバック、アイデア、賞賛や憎しみの任意の種類がある場合は、躊躇しないでくださいとコメントでそれを共有してください.
    読書ありがとう