npmを介してインストールされたノードモジュールを編集する方法


124

私はnode_swizモジュールを使用していますが、このモジュールはバリデーターモジュールを使用しています。

バリデーターモジュールに変更を加えたいのですが、npm installを使用してモジュール/依存関係をインストールしました。

node_modules内のバリデーターモジュールに変更を加えることはできますか?それとも、node_modulesの依存関係が再作成され、herokuに公開したとき、または次回npm installを実行したときに最新バージョンが取得されますか?

構造は次のようになります。

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

助けてくれてありがとう!

回答:


242

ファイルを直接編集できますが、これはnpmが更新されるたびに上書きされるため、ソースに直接行くのが最善の方法です。

変更がモジュール全体の機能に影響を及ぼし、他のユーザーに役立つ可能性がある場合は、githubの元のソースに貢献して、実装される変更を探すことができます。

これが必要な独自の機能であり、モジュールの開発に役立たない場合は、githubからフォークして変更を加えるのが最善の方法です。NPMを使用してgithubから直接アイテムをインストールできます。この方法では、将来の変更を元のソースからカスタムバージョンに統合できます。

githubから直接インストールするには、次のコマンドを使用します。

npm install https://github.com/<username>/<repository>/tarball/master


2
ありがとう!それがまさに私が知りたかったことです。また、これを読んで他人のために...私はpackage.jsonファイルで私のgithubの上にあるモジュールが含まれるように望んでいた、との情報はそれについてここにあります:stackoverflow.com/a/8306715/1810875
user1810875

22
フォークする前にローカルシステムで変更していますが、変更は影響を与えていないようです。node_modules / package_name / lib / file_name.jsであるjavascriptファイルを変更すると影響がありますか?
好奇心旺盛な

1
ただの変更です。何かが変更されたかどうかはわかりませんが、個人的にはGit URLをgit://github.com/ <user> / <package> .git "として指定する必要がありました
Craig

5
@JohnDevorカスタマイズされたモジュールをインストールする代わりに、「npm link」コマンドを使用して、そのフォルダーへのシンボリック
cli

3
それを考え出した、私はフォルダーに移動して/node_modules実行する必要があり、それでnpm installすべてが順調です!
Adam Moisa 2017年

6

patch-packageを使用して、ノードモジュールに変更を加えて永続化できます。

これは、最初に内部のパッケージに変更を加えnode_modules、次に次のコマンドを実行することで実行<package name>できます。変更したパッケージの名前になります。

npx patch-package <package name>

その後、patch-packageはpatches、変更を表すファイルを含むフォルダーを作成します。次に、このファイルをgitにコミットし、パッチをnpx patch-package(引数なしで)実行することで後で復元できます。

オプションのステップ:

package.jsonのスクリプトセクションに以下を追加して、「npm install」を実行したときに依存関係に自動的にパッチを適用します。

"postinstall": "npx patch-package" 

1
問題なく私のために働いた非常に素晴らしい解決策。
mpj

かっこいい!参考:パッチは依存関係のpostinstallスクリプトに対するものだったため、「postinstall」ではなく「preinstall」を使用する必要がありました。インストール後のフェーズで適用する必要がある他のパッチがある場合、それをどのように実装しますか?
スーパーロール

1
信じられないほどの答えですが、netlifyにデプロイする前に、depに変更を加える必要がありました。preinstall 'npx patch-package'が魔法のチケットでした。適切な画像がWebサイトに表示されます。
TheBetterJORT

1

新しいモジュールを公開したくなかったしnpm install、変更を上書きしたくなかった。私はこれらの問題の両方の解決策を見つけましたが、@ Sdedelbrockのアドバイスを取り入れた方がよいでしょう。しかし、それを実行したい場合は、次のようにします。

  1. package.jsonファイルを編集して、編集する依存関係を削除します。
  2. プロジェクトに/node_modules移動し、コミット可能なリポジトリ内の別の場所にフォルダを移動します。だから今/node_modules/dependencyです/dependency
  3. cd 依存関係ディレクトリに入力し、 npm link
  4. cdプロジェクトディレクトリと型のルートにnpm link dependency あなたが、この外の操作を行うことが重要である/node_modules/dependency

すべてがうまくいったら、で作成したシンボリックリンクができているはず/node_modules/dependencyです。これで、プロジェクトを実行して、機能するかどうかを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.