このプロジェクトをマシンに複製する場合は、フォルダー名にpackage.json
使用しないでください。 yarn
が壊れます ( An unexpected error occurred: "EISDIR: illegal operation on a directory, read".
)。
このドキュメントの元のバージョンはyarnpkgからコピーされました。
npm ドキュメント、std-pkg、clean-publish、package-json-validator、cosmiconfig、rc (cosmiconfig の反対のアプローチとして) も参照してください。
name
version
description
keywords
license
homepage
bugs
repository
author
contributors
files
main
bin
man
directories
scripts
scripts
config
dependencies
devDependencies
peerDependencies
optionalDependencies
bundledDependencies
engines
os
cpu
libc
private
publishConfig
flat
resolutions
workspaces
bolt
unpkg
types
flow:main
browserslist
module
browser
esnext
es2015
esm
module-browser
modules.root
jsnext:main
react-native
sideEffects
source
、 umd:main
source
@std/esm
jspm
ignore
format
registry
shim
map
browserify.transform
proxy
homepage
babel
eslintConfig
jest
stylelint
size-limit
pwmetrics
ava
nyc
preferGlobal
style
less
standard
package.json
の 2 つの最も重要なフィールドはname
とversion
で、これらがないとパッケージをインストールできません。 name
とversion
フィールドは、一意の ID を作成するために一緒に使用されます。
name
{
"name" : " my-awesome-package "
}
これはパッケージの名前です。これは、URL 内で、コマンドラインの引数として、およびnode_modules
内のディレクトリ名として使用されます。
yarn add [name]
node_modules/[name]
https://registry.npmjs.org/[name]/-/[name]-[version].tgz
ルール
@scope/
を含む)。.
) またはアンダースコア ( _
) で始めることはできません。ヒント
js
やnode
入れないでください。require()
呼び出しでも使用されます。version
{
"version" : " 1.0.0 "
}
パッケージの現在のバージョン。
description
{
"description" : " My short description of my awesome package "
}
説明は、パッケージの目的を理解するのに役立つ単なる文字列です。パッケージマネージャーでパッケージを検索するときにも使用できます。
keywords
{
"keywords" : [ " short " , " relevant " , " keywords " , " for " , " searching " ]
}
キーワードは、パッケージ マネージャーでパッケージを検索するときに役立つ文字列の配列です。
license
{
"license" : " MIT " ,
"license" : " (MIT or GPL-3.0) " ,
"license" : " SEE LICENSE IN LICENSE_FILENAME.txt " ,
"license" : " UNLICENSED "
}
すべてのパッケージにはライセンスを指定して、その使用がどのように許可されているか、およびそのライセンスに課されている制限をユーザーが理解できるようにする必要があります。
特別な理由がない限り、オープン ソース (OSI 承認) ライセンスを使用することをお勧めします。仕事の一環としてパッケージを構築した場合は、ライセンスを決定する前に会社に確認するのが最善です。
次のいずれかである必要があります。
<filename>
を指すSEE LICENSE IN <filename>
文字列。UNLICENSED
文字列。 ドキュメントへのさまざまなリンク、問題をファイルする場所、パッケージ コードが実際に存在する場所。
homepage
{
"homepage" : " https://your-package.org "
}
ホームページは、パッケージのランディング ページまたはドキュメントへの URL です。
Create React App でも使用されます
bugs
{
"bugs" : " https://github.com/user/repo/issues "
}
プロジェクトの問題トラッカーへの URL。これは電子メール アドレスのようなものでも構いません。これにより、パッケージに関する問題の送信先をユーザーに確認する方法が提供されます。
repository
{
"repository" : { "type" : " git " , "url" : " https://github.com/user/repo.git " },
"repository" : " github:user/repo " ,
"repository" : " gitlab:user/repo " ,
"repository" : " bitbucket:user/repo " ,
"repository" : " gist:a1b2c3d4e5f "
}
リポジトリは、パッケージの実際のコードが存在する場所です。
プロジェクトのメンテナー。
author
{
"author" : { "name" : " Your Name " , "email" : " [email protected] " , "url" : " http://your-website.com " },
"author" : " Your Name <[email protected]> (http://your-website.com) "
}
パッケージの作成者情報。著者は一人の人間です。
contributors
{
"contributors" : [
{ "name" : " Your Friend " , "email" : " [email protected] " , "url" : " http://friends-website.com " }
{ "name" : " Other Friend " , "email" : " [email protected] " , "url" : " http://other-website.com " }
],
"contributors" : [
" Your Friend <[email protected]> (http://friends-website.com) " ,
" Other Friend <[email protected]> (http://other-website.com) "
]
}
あなたのパッケージに貢献した人たち。寄稿者はさまざまな人々です。
プロジェクトに含めるファイルと、プロジェクトのメイン エントリ ポイントを指定できます。
files
{
"files" : [
" filename.js " ,
" directory/ " ,
" glob/*.{js,json} "
]
}
これらはプロジェクトに含まれるファイルです。単一のファイル、ディレクトリ全体を指定することも、ワイルドカードを使用して特定の基準を満たすファイルを含めることもできます。
main
{
"main" : " filename.js "
}
これは、プロジェクトの機能の主要なエントリ ポイントです。
bin
{
"bin" : " bin.js " ,
"bin" : {
"command-name" : " bin/command-name.js " ,
"other-command" : " bin/other-command "
}
}
インストールされるプロジェクトに含まれる実行可能ファイル。
man
{
"man" : " ./man/doc.1 " ,
"man" : [ " ./man/doc.1 " , " ./man/doc.2 " ]
}
プロジェクトに関連付けられたマニュアル ページがある場合は、ここに追加します。
directories
{
"directories" : {
"lib" : " path/to/lib/ " ,
"bin" : " path/to/bin/ " ,
"man" : " path/to/man/ " ,
"doc" : " path/to/doc/ " ,
"example" : " path/to/example/ "
}
}
パッケージをインストールするときに、バイナリ ファイル、マニュアル ページ、ドキュメント、サンプルなどを配置する正確な場所を指定できます。
パッケージには、実行可能なスクリプトまたはその他の構成を含めることができます。
scripts
{
"scripts" : {
"build-project" : " node build-project.js "
}
}
スクリプトは、単純なビルド プロセスや開発ツールなど、パッケージに関連するタスクを自動化する優れた方法です。 "scripts"
フィールドを使用すると、 yarn run <script>
として実行されるさまざまなスクリプトを定義できます。たとえば、上記のbuild-project
スクリプトはyarn run build-project
で呼び出すことができ、 node build-project.js
を実行します。
特定のスクリプト名は特殊です。定義されている場合、 preinstall
スクリプトは、パッケージがインストールされる前に、yarn によって呼び出されます。互換性上の理由から、 install
、 postinstall
、およびprepublish
というスクリプトはすべて、パッケージのインストールが完了した後に呼び出されます。
start
スクリプトの値のデフォルトは、 node server.js
です。
"scripts": {"start": "node server.js"}
.パッケージのルートにserver.jsファイルがある場合、npmはデフォルトで起動コマンドをノードserver.jsに設定します。
"scripts":{"preinstall": "node-gyp rebuild"}
。パッケージのルートに binding.gyp ファイルがある場合、npm はデフォルトで、node-gyp を使用してコンパイルするプレインストール コマンドを実行します。-- npm ドキュメント
scripts
npm は、次のスクリプトのpackage.json
ファイルのscripts
プロパティをサポートします。
prepublish
: パッケージがパックされて公開される前、およびローカルの npm install で引数なしで実行します。 (以下を参照してください)prepare
: パッケージがパックされて公開される前と、引数なしでローカルの npm install で実行します (以下を参照)。これは、事前公開の後、ただし事前公開のみの前に実行されます。prepublishOnly
: パッケージが準備およびパックされる前に、npm公開時にのみ実行します。 (以下を参照してください。)prepack
: tarball がパックされる前に実行します (npm Pack、npm Publishing、および git 依存関係のインストール時)postpack
: tarball が生成され、最終的な宛先に移動された後に実行します。publish
、 postpublish
: パッケージが公開された後に実行します。preinstall
: パッケージがインストールされる前に実行しますinstall
、 postinstall
: パッケージがインストールされた後に実行します。preuninstall
、 uninstall
: パッケージがアンインストールされる前に実行します。postuninstall
: パッケージがアンインストールされた後に実行します。preversion
: パッケージのバージョンを変更する前に実行します。version
: パッケージのバージョンを上げた後、コミット前に実行します。postversion
: パッケージのバージョンを上げた後、コミット後に実行します。pretest
、 test
、 posttest
: npm test コマンドによって実行されます。prestop
、 stop
、 poststop
: npm stop コマンドによって実行されます。prestart
、 start
、 poststart
: npm start コマンドによって実行されます。prerestart
、 restart
、 postrestart
: npm restart コマンドによって実行されます。注: 再起動スクリプトが提供されていない場合、npm restart は停止スクリプトと開始スクリプトを実行します。preshrinkwrap
、 shrinkwrap
、 postshrinkwrap
: npm shrinkwrap コマンドによって実行されます。ソース: npm ドキュメント。
config
{
"config" : {
"port" : " 8080 "
}
}
スクリプトで使用される構成オプションまたはパラメータ。
あなたのパッケージは他のパッケージに依存する可能性が非常に高くなります。これらの依存関係をpackage.json
ファイルで指定できます。
dependencies
{
"dependencies" : {
"package-1" : " ^3.1.4 "
}
}
これらは、パッケージの開発と運用の両方で必要な依存関係です。
正確なバージョン、最小バージョン (例:
>=
)、またはバージョンの範囲 (例:>= ... <
) を指定できます。
devDependencies
{
"devDependencies" : {
"package-2" : " ^0.4.2 "
}
}
これらはパッケージの開発時にのみ必要となるパッケージですが、運用環境にはインストールされません。
peerDependencies
{
"peerDependencies" : {
"package-3" : " ^2.7.18 "
}
}
ピアの依存関係を使用すると、パッケージと他のパッケージのバージョンとの互換性を示すことができます。
optionalDependencies
{
"optionalDependencies" : {
"package-5" : " ^1.6.1 "
}
}
オプションの依存関係をパッケージで使用できますが、必須ではありません。オプションのパッケージが見つからない場合でも、インストールは続行されます。
bundledDependencies
{
"bundledDependencies" : [
" package-4 "
]
}
バンドルされた依存関係は、パッケージを公開するときに一緒にバンドルされるパッケージ名の配列です。
オペレーティング システムの互換性など、パッケージに関連するシステム レベルの情報を提供できます。
engines
{
"engines" : {
"node" : " >=4.4.7 <7.0.0 " ,
"zlib" : " ^1.2.8 " ,
"yarn" : " ^0.14.0 "
}
}
エンジンは、パッケージで使用する必要があるクライアントのバージョンを指定します。これは、 process.versions
およびyarn の現在のバージョンに対してチェックします。
os
{
"os" : [ " darwin " , " linux " ],
"os" : [ " !win32 " ]
}
これにより、パッケージのオペレーティング システムの互換性が指定されます。 process.platform
に対してチェックします。
cpu
{
"cpu" : [ " x64 " , " ia32 " ],
"cpu" : [ " !arm " , " !mips " ]
}
これを使用して、パッケージが特定の CPU アーキテクチャでのみ実行されるように指定します。これはprocess.arch
と照合します。
libc
{
"libc" : [ " glibc " ],
"libc" : [ " musl " ]
}
これを使用して、パッケージが libc の特定のフレーバーでのみ実行されるように指定します。これはdetect-libc
からの結果と照合します。
private
{
"private" : true
}
パッケージをパッケージ マネージャーで公開したくない場合は、これをtrue
に設定します。
publishConfig
{
"publishConfig" : {
...
}
}
これらの構成値は、パッケージを公開するときに使用されます。たとえば、パッケージにタグを付けることができます。
flat
{
"flat" : true
}
パッケージで特定の依存関係の 1 つのバージョンのみが許可され、コマンド ラインでyarn install --flat
flat と同じ動作を強制したい場合は、これをtrue
に設定します。
package.json
に"flat": true
が含まれており、他のパッケージがそのパッケージに依存している場合 (たとえば、アプリケーションではなくライブラリを構築している場合)、それらの他のパッケージもpackage.json
に"flat": true
必要になることに注意してください。コマンドラインでyarn install --flat
を使用してインストールします。
resolutions
{
"resolutions" : {
"transitive-package-1" : " 0.0.29 " ,
"transitive-package-2" : " file:./local-forks/transitive-package-2 " ,
"dependencies-package-1/transitive-package-3" : " ^2.1.1 "
}
}
特定のネストされた依存関係のバージョンをオーバーライドできます。完全な仕様については、「Selective Versions Resolutions RFC」を参照してください。
[ yarn install --flat
] を介して依存関係をインストールすると、 package.json
ファイルにresolutions
ブロックが自動的に追加されることに注意してください。
workspaces
--use-workspaces
が true の場合、 packages
package.json/workspaces
の値によってオーバーライドされます。
ソース: --use-workspaces。
bolt
構成を参照
{
"bolt" : {
"workspaces" : [
" utils/* " ,
" apps/* "
]
}
}
unpkg
ファイル パスを省略した場合 (つまり、「裸の」URL を使用した場合)、 unpkg はpackage.json
のunpkg
フィールドで指定されたファイルを提供するか、 main
(ソース) にフォールバックします。
types
パッケージにメインの.js
ファイルがある場合は、 package.json
ファイルにもメインの宣言ファイルを指定する必要があります。バンドルされた宣言ファイルを指すように、 types
プロパティを設定します。例えば:
{
"main" : " ./lib/main.js " ,
"types" : " ./lib/main.d.ts "
}
typings
フィールドはtypes
と同義であり、同様に使用できることに注意してください。
また、メインの宣言ファイルの名前がindex.d.ts
で、パッケージのルート( index.js
の隣)にある場合は、 types
プロパティをマークする必要はありませんが、マークすることをお勧めします。
出典: TypeScript ドキュメント
注: Flow では異なるアプローチが使用されます
flow:main
公式にはサポートされていません。提案書はこちらです。
browserslist
?異なるフロントエンド ツール間でターゲット ブラウザを共有するためのライブラリ。以下で使用されます。
package.json
または 2.0 でサポートされるbrowserslist
ファイルの外部設定)以下をpackage.json
に追加すると、Browserslist に依存するすべてのツールはその構成を自動的に見つけます。
{
"browserslist" : [
" > 1% " ,
" last 2 versions "
]
}
出典: ブラウザリスト。
「React App Support の作成」も参照してください。
概要については、「マルチプラットフォーム npm パッケージのセットアップ」を参照してください。
module
pkg.module
ES2015 モジュール構文を持つモジュールを指しますが、それ以外の場合はターゲット環境がサポートする構文機能のみを指します。完全な説明はここにあります。
サポート: ロールアップ、Webpack
browser
browser
フィールドは、クライアント側で使用するためにモジュールをパッケージ化するときに、JavaScript バンドラーまたはコンポーネント ツールへのヒントとしてモジュール作成者によって提供されます。提案書はこちらです。
サポートされているもの: rollup、webpack、browserify
リクエストされたサポート: babel-plugin-module-resolver
esnext
完全な提案書はここにあります。簡単な説明:
esnext
: ES モジュールで、トランスパイルされていないステージ 4 機能 (またはそれ以前の機能) を使用するソース コード。main
: Node.js が現在処理できる最新の JavaScript を備えた CommonJS モジュール (または UMD モジュール) を指します。module
使用例はesnext
経由で処理できるはずです。browser
esnext
の拡張版で扱える{
"main" : " main.js " ,
"esnext" : {
"main" : " main-esnext.js " ,
"browser" : " browser-specific-main-esnext.js "
}
}
参照: トランスパイルされていないソース コードを npm 経由で配信する
es2015
トランスパイルされていない ES6 コード。ソース: Angular Package Format (APF) v5.0
esm
プロポーザルはここにあります: 調整されたプロポーザル: ES モジュール "esm": true package.json フラグ
以下も参照してください。
module-browser
この問題を参照してください
moduleBrowser
、 jsnext:browser
とも呼ばれます。
modules.root
「.js の擁護」で言及されています。
modules.resolver
もあります。
jsnext:main
非推奨
jsnext:main
、インポート/エクスポート宣言を含むファイルの場所を示すpkg.module
に置き換えられました。オリジナルの提案書はこちらです。
サポート: ロールアップ。
react-native
browser
と同様に動作しますが、反応ネイティブ固有のモジュールが対象です。ソース。
sideEffects
パッケージのモジュールには (評価時に) 副作用がなく、エクスポートのみを公開することを示します。これにより、webpack などのツールで再エクスポートを最適化できるようになります。
参照: sideEffects
例、関数を純粋、eslint-plugin-tree-shaking としてマークする提案。
source
、 umd:main
「package.json でのビルドの指定」を参照してください。
source
パーセルバンドラー/パーセル#1652 を参照してください。
@std/esm
開発者は、ほぼすべてのことについて強い意見を持っています。これに対応するために、 @std/esm
では、 package.json
の"@std/esm"
または"@std":{"esm":{}}
フィールドを使用して追加機能のロックを解除できます。
出典: @std/esm ロック解除可能
jspm
すべてのパッケージ プロパティを package.json のベースに記述することも、 npm
専用に使用したい既存のプロパティを変更したくない場合は、 jspm
プロパティ内に jspm 固有の設定を記述することもできます。 package.json および jspm は、ルート レベルの構成オプションよりもこれらのオプションを使用します。
例えば:
{
"name" : " my-package " ,
"jspm" : {
"main" : " jspm-main "
}
}
詳細な仕様を参照してください。
ignore
無視する特定のファイルまたはフォルダーがある場合は、それらを配列にリストすることができます。
format
オプションは、 esm
、 amd
、 cjs
、およびglobal
です。
npm
からモジュールをロードする場合、モジュール形式はデフォルトでcjs
として扱われ、自動検出は実行されません。別の形式のモジュールをロードするには、このプロパティを手動でオーバーライドする必要があります。
モジュール形式
esm
(ECMAScript Module) は現在、package.json では使用されていません。
registry
jspm は、レジストリのコンテキストでの依存関係を理解します。
npm からパッケージをロードするとき、jspm はデフォルトのレジストリをnpm
に設定し、それに応じて依存関係を処理します。
GitHub からパッケージをロードする場合、jspm には既存の GitHub リポジトリに対する依存関係が何を意味するかを知る方法がないため、レジストリ プロパティが存在しないと依存関係プロパティは無視されます。
レジストリ プロパティを設定すると、jspm がパッケージを解釈する方法も決まります。たとえば、 registry: "npm"
の GitHub パッケージは、npm から依存関係を取得するとともに、CommonJS として解釈され、最初から npm エンドポイントからインストールされたかのように、ディレクトリや JSON が必要とする機能をサポートします。
レジストリ プロパティがregistry: "jspm"
に設定されている GitHub 上のパッケージは、その依存関係が jspm スタイルの依存関係として扱われます。
shim
グローバルとして記述されたパッケージは、モジュラー環境で適切に動作するために shim 構成が必要です。パッケージ内のファイルsome/global.js
shim するには、次のように記述できます。
{
"shim" : {
"some/global" : {
"deps" : [ " jquery " ],
"exports" : " globalExportName "
}
}
}
deps
とexports
どちらもオプションです。
exports
、スクリプトによって記述されたグローバルとして SystemJS ローダーによって自動的に検出されます。ほとんどの場合、この検出は正しく機能します。
exports
がない場合は、ショートカット形式の"some/global": ["jquery"]
もサポートされます。
map
マップ構成は、別のローカルまたは外部モジュールを指すように内部要件を書き換えます。
独自の依存関係を含むパッケージ、 third_party/dep
にあるdep
を考えてみましょう。内部的には次のような require ステートメントを持つことができます。
require ( 'dep' ) ;
ローカル バージョンを使用するには、次のように記述します。
{
"map" : {
"dep" : " ./third_party/dep "
}
}
サブモジュール内で独自の名前でパッケージを参照すると便利な場合もあります。
{
"map" : {
"thispackage" : " . "
}
}
これにより、 import 'thispackage/module'
ための内部要求が正しく解決されるようになります。
マップ構成では、依存関係のサブモジュールを参照することもできます。
モジュールを空のモジュールにマッピングすることで、モジュールを完全に除外することもできます。
{
"map" : {
"jquery" : " @empty "
}
}
返される値は、エクスポートのない Module オブジェクトになります。
browserify.transform
ドキュメントはこちら
proxy
多くの場合、バックエンド実装と同じホストおよびポートからフロントエンド React アプリを提供します。
出典: 開発中の API リクエストのプロキシ化
homepage
出典: 相対パスの構築
babel
この問題を参照してください。
eslintConfig
jest
{
"jest" : {
"verbose" : true
}
}
ソース: jest ドキュメント
stylelint
参照: 新しい構成ローダー
size-limit
このライブラリを使用している場合はpackage.json
でその構成を定義できます。
{
"size-limit" : [
{
"limit" : " 9 KB " ,
"path" : " index.js "
}
]
}
出典: サイズ制限
pwmetrics
package.json
でオプションを指定します。
{
"pwmetrics" : {
"url" : " http://example.com/ " ,
"expectations" : {
"ttfcp" : {
"warn" : " >=1500 " ,
"error" : " >=2000 "
}
}
}
}
利用可能なすべてのオプションはここにあります
出典: pwmetrics
ava
例:
"ava" : {
"require" : [ " @std/esm " ]
}
出典: ava
nyc
例:
"nyc" : {
"extension" : [ " .js " , " .mjs " ],
"require" : [ " @std/esm " ]
}
出典: ニューヨーク
preferGlobal
非推奨
このオプションは以前は npm 警告をトリガーしていましたが、今後は警告されなくなります。これは純粋に情報提供を目的として存在します。可能な限り、バイナリをローカルの devDependency としてインストールすることをお勧めします。
style
package.json
のstyle
属性は、CSS パッケージをインポートする場合に便利です。提案書はこちらです。
サポート対象: Parcelify、npm-less、rework-npm、npm-css。
istf-spec も参照してください。
less
style
と同じですが、価格は下がります。
サポート: npm-less。
次のフィールドは将来の拡張のために予約されています: build
、 default
、 email
、 external
、 files
、 imports
、 maintainer
、 paths
、 platform
、 require
、 summary
、 test
、 using
、 downloads
、 uid
。
次のフィールドは、パッケージ レジストリが独自の裁量で使用できるように予約されています: id
、 type
。
_
または$
で始まるすべてのプロパティも、パッケージ レジストリが独自の裁量で使用できるように予約されています。
出典: CommonJS wiki
standard
標準 JS は JavaScript スタイル ガイド、リンター、およびフォーマッタであり、 parser
、 ignore
、 globals
、 plugins
のプロパティを package.json に追加できます。
例:
"standard" : {
"parser" : " babel-eslint " ,
"ignore" : [
" **/out/ " ,
" /lib/select2/ " ,
" /lib/ckeditor/ " ,
" tmp.js "
]
}
参照: 標準 JS