テストを.npmignoreする必要がありますか?


91

正確には何を入れればよい.npmignoreですか?

テスト?スタッフのような.travis.yml.jshintrc?モジュールの実行時に不要なもの(readmeを除く)?

これに関するガイダンスは見つかりません。


4
誰かの呼び出しは必要ありませんすべて無視すべきnpm install yourlibraryたとえば、.travis.ymlおよび.jshintrc
ランテ

本当に?readme?これは公式にどこかで推奨されていますか?
カラム14

2
.npmignoreまたは"files"docs.npmjs.com/files/package.json#files)に関係なく、READMEは自動的に含まれます。
ニコラスFantone

回答:


86

おそらくあなたが見つけたように、NPMはそこに何を入れるべきかを具体的に述べておらず、むしろデフォルトで無視されるファイルのリストを持っています。存在しない場合、デフォルトで.gitignoreはすべてが無視さnpmれるため、多くの人はそれを使用し.npmignoreません。さらに、上記のリンクで概説されているように、多くのファイルは設定に関係なくデフォルトですでに無視されており、一部のファイルは常に無視から除外されています。

これは基本的にのサブセットであるため、常にあるべき場所についてはそれほど公式なものではありませんが、.gitignorenodeを5年間使用して収集したものから、ここに私が思いついたものがあります。

注:プロダクションとは、モジュールが誰かによって使用され、モジュール自体で開発されていないときを意味します。


プレリリースのクロスコンパイルされたソース

  • 長所:JavaScriptにクロスコンパイルする言語を使用している場合は、リリース前にプリコンパイル.coffeeし、パッケージにファイルを含めずに、gitリポジトリで追跡し続けることができます。

ファイルの残り物を作成する

  • 長所:などを使用している人node-gypは、ビルド中に生成されたオブジェクトファイルをパッケージに含めるべきではない可能性があります。
  • 短所:これは.gitignoreとにかく常に入る必要があります。npmの観点から.npmignoreオーバーライドしたファイルをすでに使用している場合は、これらをここに配置する必要が.gitignoreあります。

テスト

  • 長所:プロダクションコードの手荷物が減ります。
  • 短所:テストが失敗する原因となる古いバージョンのノードが実行されているなど、システム固有の障害が発生する可能性が非常に低い場合、ライブ環境でテストを実行することはできません。

継続的インテグレーション設定/メタファイル

  • 長所:繰り返しになりますが、手荷物が減ります。などのこと.travis.ymlは、コードの使用、テスト、または表示には必要ありません。

非READMEドキュメントとコード例

  • 長所:手荷物が少ない。一部の人々は、Readmeで少なくとも最小限の実行可能な機能を表現できない場合、モジュールが大きすぎるという考えの中に存在します。
  • 短所:完全なドキュメントやコード例を自分のファイルシステムで見ることはできません。彼らはリポジトリにアクセスする必要があります(インターネット接続も必要です)。

Github-pagesオブジェクト

  • 長所:モジュールをリポジトリとしても使用する場合は、リリースにCNAMEファイルやプレースホルダーを散らかす必要はありません。index.htmlgh-pages

bower.jsonと友達

  • 長所:リリース前に依存関係を組み込むことにした場合、エンドユーザーがbowerをインストールしてからそれを使ってさらに多くのものをインストールする必要はありません。私は個人的には、それらをパッケージに入れておきます。私が行うときnpm install、私はnpmのみに依存し、他の外部ソースには依存しません。

基本的に、npmパッケージから除外したいが、npmリポジトリから除外したくないものがある場合は、これを使用する必要があります。これはアイテムの長いリストではありませんが、npmは、パッケージ内に無関係なオブジェクトを残しておくよりも、機能を組み込んでいます。


使用できないスクリプトをpackage.jsonファイルから削除する方法はありませんか?例えば、テストスクリプト?すべてを削除するのは少し面倒ですが、スクリプトをファイルに保存します...
inf3rno

いいえ、ありません。とにかくそれは主にNPMのためのものであり、テストのみを実行している場合は、元のコマンドを介してそれらにアクセスして実行することができるため、package.jsonからそれらを省略できます。
SamT

63

ランテの短くて総合的な答えSamTの大きな答えに同意します

  • パッケージにテストを含めないでください。
  • パッケージには本番用ランタイムファイルのみを含める必要があります。
  • これにより、パッケージをより簡単かつ迅速にダウンロードできるようになります。

それらの答えへの私の貢献:

.npmignoreは、パッケージファイルを選択するためのブラックリストの方法です。しかし、より実用的な方法では、package.jsonのfilesフィールドを使用して、パッケージに含める必要があるファイルをホワイトリストに登録できます。

{
  "files": [
    "lib/",
    "index.js"
  ]
}

私はそれがよりシンプルで将来の証拠であり、より良いセマンティクスを持っていると思います


3
...覚えやすく、事故が起こりにくいことは言うまでもありません(私ができる限り忘れがたい場合)。先端をありがとう、これは素晴らしいです。
コナー

2
私はこのアプローチが好きです。
ブレイディホルト

2
私は、あなたもそれは:)あなたのpackage.jsonの「メイン」ファイルであると仮定すると、「index.js」を省略することができると思う
ベン・ジョージ

画像や不要なドキュメントを無視しても問題ありません。しかし、テストを無視することはおそらく良い考えではありません。追加のKBをダウンロードしてもそれほど時間はかかりません。npm testすべてのnode_modulesで再帰的に実行すると、特定の環境で動作が異なる場合にヒントが得られます。
adelriosantiago 2017

3
NicolásFantoneザ・@ ファイルプロパティが受け入れるグロブにもパターンを。したがって、を作成せずにテストファイルを無視できます.npmignorefiles: ["lib", "!lib/**/*.test.js"]。:)
Sureshraj 2019

15

明確にするために、誰かがを行うとnpm install your-librarynpmは、リポジトリに含まれているすべてのソースファイルをダウンロードします.npmignore

ライブラリをインストールする人は、ライブラリを実行するだけで十分であり、それ以外は必要ないことを理解してください。

たとえば、誰かがライブラリをインストールするとき、おそらく彼/彼女はあなた.travis.ymlやあなたの.jshintrcファイル、あるいはいくつかの画像、Gruntファイル、ドキュメントなどさえ気にしていません 。

.npmignore npmパッケージのファイル数を減らし、ダウンロードを高速化できます


1
ここの感情は良いですが、明確にするために:ダウンロードされる.npmignoreものに直接影響を与えることはありません。npmを発行してアップロードするときにパッケージに何が入るかに影響します。これにより、ダウンロードするファイルが間接的に作成されます。
Mark Stosberg、2018年

2

テストは含めないでください。多くの場合、テストは実際のコードベースの5倍のサイズです。テストがGithubなどで行われている限り、それで十分です。

しかし、絶対にすべきことは、NPMパッケージを公​​開された形式でテストすることです。実際のコードベースに存在するが、テストスイートの一部ではないスモークテストを作成します。

パッケージをtarballした後のテストについては、https//github.com/ORESoftware/r2gを参照してください。

実際にNPMに公開せずに、 `npm publish`の結果をテストする方法は?

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