これは全く新しい質問ではありませんが、私はしばらくの間探し回っていましたが、解決策を見つけるのに苦労しています。
角度変換と呼ばれる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の経験はあまりありません。この問題に関するフィードバックをお寄せください。パッケージのソースコードに変更を加える必要がある場合、それは十分に一般的な問題であると思われますか?おそらくもっと良い解決策がありますか?よろしくお願いします。
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
スクリプトを使用してこれを行う別の方法があるかもしれませんが、それが可能かどうかはわかりません。試したことがない。
Npm 5を使用している場合の更新:
Npm @ 5現在、
prepublish
スクリプトは非推奨です。ビルドステップには
prepare
を使用し、アップロード専用にはprepublishOnly
を使用します。
スクリプトに"prepare": "npm run build"
を追加すると、すべての問題が修正されました。
@RyanZimの優れた答えから便乗するには、postinstall
が間違いなく有効なオプションです。
次のいずれかを実行します。
別の人のリポジトリをフォークした場合、スクリプトをビルドするための必要な手段を提供しないため、GitHubを介したパッケージのインストールが機能しないという問題を説明するために問題を提起する価値があります。そこから、PRを受け入れてポストインストールでこれを解決するか、拒否して#2を行うことができます。
コマンドnpm install git+https://[email protected]/myRepo/angular-translate.git
を使用するだけです。ありがとう。