問題タブ [npm-link]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
175 参照

javascript - NPMは同じプロジェクト内の複数の関数/モジュールをリンクしますか?

コマンド ラインでグローバルに使用できるようにしたいヘルパー関数がいくつかあります。このチュートリアルに従ってnpm link、これを達成することができました:

ただし、単一のプロジェクトにそれらのいくつかがあります。たとえば、、 standalone-functions/tool1.jsなどですstandalone-functions/tool2.jsstandalone-functions/tool3.js

しかし、私は 1 つしか持っていませんpackage.json。それで、1つをリンクすることに成功しました。package.jsonしかし、他のものもリンクする方法はありますか、またはそれぞれに個別の s を持つ個別のプロジェクトを用意する必要がありますか?

0 投票する
3 に答える
5037 参照

node.js - npm-link ライブラリの無効なフック呼び出し

問題の説明:

  • 私は現在、というパッケージを作成していますeformless

  • CRAを使用sandboxして、パッケージをリンクしたというディレクトリを作成しました。

  • テストしようとしているリンクされたパッケージでサンドボックス反応アプリを起動しようとすると、次のエラーが発生し続けます。

エラー: 無効なフック呼び出しです。フックは、関数コンポーネントの本体内でのみ呼び出すことができます。これは、次のいずれかの理由で発生する可能性があります。

  1. React とレンダラー (React DOM など) のバージョンが一致していない可能性があります。
  2. フックのルールに違反している可能性があります
  3. 同じアプリに複数の React のコピーがある可能性があります。この問題をデバッグして修正する方法についてのヒントについては、stackoverflow ToS により変更されたリンクを参照してください。

問題が発生する場所:

この問題は、React からインポートされたフックを使用するカスタム フックを作成した私のライブラリを指しているようです。
私のコードからの問題のある抜粋は次のとおりです。

私のセットアップはかなり正常で、他のプロジェクトでは正常に動作しているようです:

  • 最初に、ライブラリをバンドルしましたrollup -c
  • eformlessライブラリフォルダー内にリンクを作成しましたnpm link
  • sandboxそして、私のフォルダー内にシンボリックリンクを作成しましたnpm link eformless

私が試したこと:

私は当然、エラーメッセージにあるリンクを介して問題を解決しようとしました. ここで述べたように、これは独自のライブラリをリンクするときに問題になるようです

この問題は、npm リンクまたは同等のものを使用するときにも発生する可能性があります。その場合、バンドラーは 2 つの React を「見る」可能性があります。1 つはアプリケーション フォルダーにあり、もう 1 つはライブラリ フォルダーにあります。myapp と mylib が兄弟フォルダーであると仮定すると、考えられる修正の 1 つは、mylib から npm link ../myapp/node_modules/react を実行することです。これにより、ライブラリはアプリケーションの React コピーを使用するようになります。

フォルダーで実行しnpm link ../sandbox/node_modules/reactましたがeformless、ノードサーバーを閉じて再コンパイルした後でも、これは役に立たないようです。

いずれにせよ、runnign は単一バージョンの react しか表示せず、カスタム フック内でトップレベルで使用されnpm ls reactていることを考えると、それは有効であるはずなので、本当に混乱しているように思えます。useState

問題の再現

両方のリポジトリは公開されています

0 投票する
1 に答える
44 参照

npm - 更新されたバージョンの別のローカル パッケージにリンクした後、npm からパッケージをインストールする

他の人にもこのワークフローがあると確信しているので、ここで何かが欠けているに違いありません。

パッケージの新しいバージョンを開発し、それをリンクして別のアプリでテストし、別の (関連のない) パッケージをインストールするにはどうすればよいでしょうか?

私がやったこと:

  1. 実行しますgit clone git@package-to-update && cd package-to-update
  2. パッケージを編集し、package-to-update/package.jsonバージョンをに更新し2.0.0ます。
  3. を使用するように更新my-app/package.jsonしますpackage-to-update@2.0.0
  4. cd package-to-update && npm link && cd my-appp && npm link package-to-update.
  5. テストしてmy-app、問題が解決することを確認しpackage-to-update@2.0.0、小さなパーティーを開きます。
  6. のアップストリームにプッシュしpackage-to-update、マージ リクエストを作成し、メンテナーが私の変更をマージするのを待ちます。
  7. 私が取り組んでいる機能に必要なため、当面はローカルのリンクされたバージョンを使用してください。
  8. に別のパッケージother-unrelated-packageが必要であることに注意してくださいmy-app
  9. 実行しますcd my-app && npm install other-unrelated-package
  10. package-to-update@2.0.0まだ公開されていないをプルしようとしているため、NPM は失敗します。
  11. 泣く。

必要なたびに次のプロセスを実行する唯一のオプションはありますnpm installか?

  1. でダウングレードpackage-to-updatemy-app/package.jsonます。
  2. 実行しますnpm install other-package
  3. 実行しますnpm link package-to-update
  4. "でアップグレードpackage-to-updatemy-app/package.jsonます。