もし package.json
にはfiles
プロップ、および/またはdirectories
プロップがあります。
"files": [
"./src/assets/fonts/"
],
"directories": {
"assets:": "./src/assets"
}
それらを利用する方法は何ですか?ドキュメントには、それらが指定された後に何ができるかは記載されていません。
たとえば、 files docs say:
「ファイル」フィールドは、プロジェクトに含めるファイルの配列です。配列内のフォルダーに名前を付けると、そのフォルダー内のファイルも含まれます。
「プロジェクトに含める」とはどういう意味ですか?どこに含めますか?以前はなかったのに、どのようにアクセス可能になりましたか?
ディレクトリセクション で、ドキュメントは次のように述べています。
将来、この情報はother創造的な方法で使用される可能性があります。
それが使用されている既存の創造的な方法は何ですか?
「プロジェクトに含める」とは、npm publish
の実行時に作成されるパッケージ化されたtarballにファイルが含まれることを意味します。 npm pack
を実行して、実際に公開をトリガーせずに検査用のtarballを生成することもできます。この方法で、生成されたtarballを実際に開き、どのファイルが含まれていたか/含まれていなかったかを調べることができます。
.npmignore
(または.gitignore
がプロキシとして、.npmignore
がない場合)は無視するファイルのブラックリストとして機能します(したがって、デフォルトで他のすべてを含みます)、files
配列はホワイトリストです。つまり、デフォルトですべてを含めるのではなく、files
配列を指定すると、すべてがデフォルトで除外され、明示的にリストされたファイルのみがパッケージ化されたtarballに含まれます。
例として、パッケージがブラウザでの使用を目的としたライブラリであるとします。コードはlib/
にあり、browserifyを実行してdist/index.js
でブラウザー互換のライブラリにコンパイルします。 .gitignore
にリストされているファイルの束から始めます。これは、存在しないデファクト.npmignore
として使用されます。しかし、dist/
には生成されたファイルがいっぱいになったので、それらをgitリポジトリから無視する必要があります。それらを.gitignore
に追加すると、gitリポジトリから除外されますただし、パッケージtarballからも無視されます。したがって、2つのオプションがあります。.gitignore
を.npmignore
として複製しますが、dist/
には.gitignore
のみをリストします。これを行う場合、2つのファイルをほぼ同期させる必要があります。この方法は退屈でエラーが発生しやすいです。
もう1つの方法は、.npmignore
を持たず、代わりにパッケージで実際に必要なファイルをfiles
配列にリストするだけです。 README.*
、package.json
、CHANGELOG.*
(他にもいくつかあります)は、関係なくtarballに自動的に含まれます。したがって、"files": [ "dist" ]
を追加するだけで完了です。これで、パッケージtarballにはlib
からの元のソースJSもtests/
なども含まれず、代わりにdist/
に実際にコンパイルされたlibのみが含まれます。
directories
に関しては、通常lib
(es5の場合)、src
(es6、coffeescript、TypeScriptなどのソースの場合)、dist
(ブラウザーの場合)またはvm固有のビルド)、test
、output
(カバレッジレポートなどの一時的に生成されたファイル用)、doc
など。このプロパティは直接使用されませんがnpmまたは他のツール、それはディレクトリ構造を明示的にします。また、次のようにnpmスクリプトでディレクトリを参照可能にします。
"scripts": {
"clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output",
"lint": "eslint $npm_package_directories_src",
"test": "teenytest $npm_package_directories_test",
}
この方法では、ディレクトリは一度だけ指定され、変更する場合は、単一の場所で変更するだけで済みます(package.json全体ではなく)。