ステロイドのnpmリンク

npmリンク+ステロイド= npmy







あなたの多くはすでにnpmパッケージのローカル開発に出会ったと思います。 通常、これにより問題は発生しません。フォルダーを作成し、 npm init



実行し、テストを作成し、 npmリンク (またはsimlink)を使用して、準備が整うまでAPIを「ポリッシュ」します。







Babel、Rollup、Webpackなどを使用していない場合にのみ、簡単に聞こえます。 言い換えると、公開前にプロジェクトを組み立てる必要があり、ソースコードを変更するまで、すべてが問題ありません。 さらに、同時に複数のパッケージが開発されている可能性があり、それが「生活」を複雑にしている場合があります。 この状況を修正するために、小さなユーティリティnpmyを作成し、それらを説明する小さな記事を作成する必要がありました。 ワークプロセスと使用例。







したがって、私が言ったように、ローカル開発の主な問題は、 スクリプト/フック (prepublish、prepublishOnlyなど)の使用です。このため、 npm link



実際には単なるシンボリックリンクであり、開発の終わりでも適切でnpm link



ません。 npm unlink



覚えておく必要がありnpm unlink









そのため、私は次のことを決定しました。







  1. 設定は簡単です。
  2. 完全な公開サイクルをエミュレートします。
  3. 擬似公開バージョン(以降POVと呼びます)へのシンボリックリンクを作成します。
  4. 変更を追跡し、POVを更新します。




プロジェクトのセットアップ



最初に考えたのはpackage.jsonにルールを直接追加することでしたが、これは間違っています。これはローカル開発であるため、 .npmyrc



に簡単に追加できる.npmyrc



にルールを配置する決定が下されたため.gitignore









ファイル自体は、次の単純なJSONオブジェクトにすぎません。









これで設定は終了です。









打ち上げ



.npmyrc



を使用してフォルダーに移動し、 .npmyrc



を実行します。







  1. .npmyrc



    読み取り.npmyrc



  2. 以下の2つのリストに依存関係のリストをフィルターします。

    • NPMからのインストール
    • ローカルインストール。
  3. NPMから依存関係をインストールします。
  4. .npmyrc



    からの疑似公開パッケージ。
  5. POVにシンボリックリンクを作成します。
  6. 変更の追跡を開始します(ウォッチ)。




擬似公開プロセス



これは最も興味深いものであり、すべてが開始されました。 最初に、これが元のnpmでどのように機能するかを覚えておいてください。







npm install && npm publish







ご覧のとおり、ここで驚きがあります。 npm publish



prepare



は、 npm publish



npm install



(引数なし)の両方で実行されます。 したがって、公開するprepublishOnly



プロジェクトをビルドする必要がある場合は、バージョン5以降でのみprepublishOnly



使用してください。 このフックは4で追加されましたが、正しく機能しません。また、組み立てられたパッケージの代わりに、残念ながらそれを残します。







私のプロセスでは、すべてのフックを開始する前に、別のリンクがあります。つまり、プロジェクトのコピーを作成します(node_modulesとともに)。







  1. コピーは、 rsync



    を介してtempフォルダーに作成されます。
  2. Package.jsonが変更され、そこからnpm test



    が削除され、疑似公開プロセスが遅くならないようになりました。
  3. 次に、コピーのために、公開プロセスに対応するすべてのフックが起動されます。
  4. 最後の仕上げとして、 files



    セクションに対応していないものをすべて削除しfiles



  5. 利益


これで、 npm



からインストールしたときに取得できるバージョンのパッケージができました。 また、ソースコードを変更するたびに、 POVは自動的に更新されます。







さらに、 npmy



package.json



binセクションを忘れず、 npmy



宣言されたスクリプトへのシンボリックリンクを正しく作成します。









合計





ご静聴ありがとうございました。このユーティリティが私だけでなく役に立つことを願っています。 :]









PSこのツールは新しいので、問題について気軽に書いてください。








All Articles