web-dev-qa-db-ja.com

フォークされたgithubリポジトリのnpmインストールとビルド

これは全く新しい質問ではありませんが、私はしばらくの間探し回っていましたが、解決策を見つけるのに苦労しています。

角度変換と呼ばれるangularアプリ用のモジュールを使用しています。ただし、ソースコードにいくつかの小さな変更を加えて、すべてが希望どおりに機能するようにしなければならなかったため、それらの変更をnpm installに保持したいと思います。同僚は、ソースコードのレポジトリをフォークし、フォークしたレポジトリを依存関係としてポイントすることを提案しました。

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz

1つ目は、このようなディレクトリをビルドなしで提供します。 package.json、.npmignore、およびいくつかのマークダウンファイルのみ

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

2番目のnpm installは完全なリポジトリを提供しますが、コマンドnpm install angular-translateを使用したときのようなビルドは得られません。事前公開スクリプトの実行について議論したことがありますが、すべてのモジュールをインストールするときにこれを行う方法がわかりません。また、フォークをnpmレジストリに自分のモジュールとして公開しようとしましたが、ここでもビルドがありません。それが正しいことかどうかわかりません...

このトピックに関する私の無知をおaびします。私はnpmの経験はあまりありません。この問題に関するフィードバックをお寄せください。パッケージのソースコードに変更を加える必要がある場合、それは十分に一般的な問題であると思われますか?おそらくもっと良い解決策がありますか?よろしくお願いします。

94
hughesjmh

npm install <ghusername>/<repoName>を試してください。<ghUsername>はGitHubユーザー名(@なし)で、<repoName>はリポジトリの名前です。これで正しくインストールされるはずです。ほとんどの場合、--saveまたは--save-devフラグをインストールコマンドで使用して、package.jsonの依存関係を保存します。

それが正しく機能しない場合は、.npmignoreファイルの内容を確認してください。

インストールコマンドに時間がかかる場合でもてないでください。 gitリポジトリからのインストールは、npmレジストリからのインストールよりも遅くなります。


編集:

あなたの問題は、あなたの場合、dist/がレポにコミットされていないことです(.gitignoreにあるため)。それは実際のコードが存在する場所です。 dist/は、パッケージがnpmレジストリに公開される前にsrc/のファイルから構築されますが、dist/はリポジトリにコミットされません。

見苦しいですが、この場合はdist/から.gitignoreを削除してから実行する必要があります:

npm run build
git add .
git commit
git Push

(最初にnpm installを実行したことを確認してください)

その後、githubからインストールできるはずです。

postinstallスクリプトを使用してこれを行う別の方法があるかもしれませんが、それが可能かどうかはわかりません。試したことがない。

105
RyanZim

Npm 5を使用している場合の更新:

Npm @ 5現在、prepublishスクリプトは非推奨です。

ビルドステップにはprepareを使用し、アップロード専用にはprepublishOnlyを使用します。

スクリプトに"prepare": "npm run build"を追加すると、すべての問題が修正されました。

5
Simon

@RyanZimの優れた答えから便乗するには、postinstallが間違いなく有効なオプションです。

次のいずれかを実行します。

  1. フォークされたリポジトリのpackage.jsonを更新して、スクリプトにpostinstall要素を追加します。ここで、コンパイル済み出力を取得するために必要なものを実行します(推奨)。
  2. Package.jsonを更新し、node_modulesの必要なディレクトリを更新するポストインストールを追加します。

別の人のリポジトリをフォークした場合、スクリプトをビルドするための必要な手段を提供しないため、GitHubを介したパッケージのインストールが機能しないという問題を説明するために問題を提起する価値があります。そこから、PRを受け入れてポストインストールでこれを解決するか、拒否して#2を行うことができます。

3
Mike B

コマンドnpm install git+https://[email protected]/myRepo/angular-translate.gitを使用するだけです。ありがとう。

1
Bimal Jha