問題タブ [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.
javascript - NPMは同じプロジェクト内の複数の関数/モジュールをリンクしますか?
コマンド ラインでグローバルに使用できるようにしたいヘルパー関数がいくつかあります。このチュートリアルに従ってnpm link
、これを達成することができました:
ただし、単一のプロジェクトにそれらのいくつかがあります。たとえば、、
standalone-functions/tool1.js
などですstandalone-functions/tool2.js
。standalone-functions/tool3.js
しかし、私は 1 つしか持っていませんpackage.json
。それで、1つをリンクすることに成功しました。package.json
しかし、他のものもリンクする方法はありますか、またはそれぞれに個別の s を持つ個別のプロジェクトを用意する必要がありますか?
node.js - npm-link ライブラリの無効なフック呼び出し
問題の説明:
私は現在、というパッケージを作成しています
eformless
CRAを使用
sandbox
して、パッケージをリンクしたというディレクトリを作成しました。テストしようとしているリンクされたパッケージでサンドボックス反応アプリを起動しようとすると、次のエラーが発生し続けます。
エラー: 無効なフック呼び出しです。フックは、関数コンポーネントの本体内でのみ呼び出すことができます。これは、次のいずれかの理由で発生する可能性があります。
- React とレンダラー (React DOM など) のバージョンが一致していない可能性があります。
- フックのルールに違反している可能性があります
- 同じアプリに複数の 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
問題の再現
両方のリポジトリは公開されています
npm - 更新されたバージョンの別のローカル パッケージにリンクした後、npm からパッケージをインストールする
他の人にもこのワークフローがあると確信しているので、ここで何かが欠けているに違いありません。
パッケージの新しいバージョンを開発し、それをリンクして別のアプリでテストし、別の (関連のない) パッケージをインストールするにはどうすればよいでしょうか?
私がやったこと:
- 実行します
git clone git@package-to-update && cd package-to-update
。 - パッケージを編集し、
package-to-update/package.json
バージョンをに更新し2.0.0
ます。 - を使用するように更新
my-app/package.json
しますpackage-to-update@2.0.0
。 cd package-to-update && npm link && cd my-appp && npm link package-to-update
.- テストして
my-app
、問題が解決することを確認しpackage-to-update@2.0.0
、小さなパーティーを開きます。 - のアップストリームにプッシュし
package-to-update
、マージ リクエストを作成し、メンテナーが私の変更をマージするのを待ちます。 - 私が取り組んでいる機能に必要なため、当面はローカルのリンクされたバージョンを使用してください。
- に別のパッケージ
other-unrelated-package
が必要であることに注意してくださいmy-app
。 - 実行します
cd my-app && npm install other-unrelated-package
。 package-to-update@2.0.0
まだ公開されていないをプルしようとしているため、NPM は失敗します。- 泣く。
必要なたびに次のプロセスを実行する唯一のオプションはありますnpm install
か?
- でダウングレード
package-to-update
しmy-app/package.json
ます。 - 実行します
npm install other-package
。 - 実行します
npm link package-to-update
。 - "でアップグレード
package-to-update
しmy-app/package.json
ます。