如果您想將此項目複製到您的電腦上,請注意不要使用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
中最重要的兩個欄位是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 批准的)許可證,除非您有特定原因不這樣做。如果您將建立軟體包作為工作的一部分,那麼最好在決定許可證之前諮詢您的公司。
必須是以下其中之一:
SEE LICENSE IN <filename>
字串指向軟體包頂層的<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
。
某些腳本名稱很特殊。如果已定義,則在安裝軟體包之前,yarn 會呼叫preinstall
腳本。出於相容性原因,名為install
、 postinstall
和prepublish
腳本都將在軟體包安裝完成後呼叫。
start
腳本值預設為node server.js
。
"scripts": {"start": "node server.js"}
。如果套件的根目錄中有 server.js 文件,則 npm 將預設啟動指令為 node 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、npmpublish 上以及安裝 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
以及目前的紗線版本。
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
}
如果您的軟體包僅允許給定依賴項的一個版本,並且您希望在命令列上強制執行與yarn install --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 "
}
}
允許您覆蓋特定嵌套依賴項的版本。有關完整規範,請參閱選擇性版本解析度 RFC。
請注意,透過 [ yarn install --flat
] 安裝依賴項會自動將resolutions
區塊新增至package.json
檔案。
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 應用程式支援。
有關介紹,請參閱「設定多平台 npm 套件」。
module
pkg.module
將指向具有 ES2015 模組語法的模組,但僅指向目標環境支援的語法功能。完整的描述在這裡。
支持者:rollup、webpack
browser
browser
欄位由模組作者提供,作為打包模組供客戶端使用時對 javascript 捆綁器或元件工具的提示。提案就在這裡。
支持者:rollup、webpack、browserify
請求支援:babel-plugin-module-resolver
esnext
完整的提案在這裡。簡短說明:
esnext
:在 ES 模組中使用第 4 階段(或更舊)功能的原始碼,未進行轉譯。main
:指向 CommonJS 模組(或 UMD 模組),其 JavaScript 與 Node.js 目前可以處理的一樣現代。module
用例應該可以透過esnext
處理。browser
可以透過esnext
的擴充版本進行處理{
"main" : " main.js " ,
"esnext" : {
"main" : " main-esnext.js " ,
"browser" : " browser-specific-main-esnext.js "
}
}
另請參閱:透過 npm 交付未轉譯的原始碼
es2015
未轉譯的 ES6 代碼。資料來源:Angular 套件格式 (APF) v5.0
esm
提案在這裡:調整後的提案:ES module "esm": true package.json flag
參見:
module-browser
看到這個問題
也稱為moduleBrowser
、 jsnext:browser
。
modules.root
在捍衛 .js 中提到。
還有modules.resolver
。
jsnext:main
已棄用
jsnext:main
已被pkg.module
取代,它指示帶有導入/匯出宣告的檔案的位置。原始提案在這裡。
支持者:總結。
react-native
工作原理與browser
類似,但適用於 React-native 特定模組。來源。
sideEffects
指示包的模組沒有副作用(在評估時)並且僅公開導出。這允許像 webpack 這樣的工具來優化重新匯出。
另請參閱: sideEffects
範例,將函數標記為純函數、eslint-plugin-tree-shaking 的建議。
source
, umd:main
請參閱在 package.json 中指定建置。
source
請參閱parcel-bundler/parcel#1652。
@std/esm
開發人員對幾乎所有事情都有強烈的意見。為了適應, @std/esm
允許使用package.json
中的"@std/esm"
或"@std":{"esm":{}}
字段解鎖額外功能。
來源:@std/esm Unlockables
jspm
您可以在 package.json 的基礎上編寫所有套件屬性,或者如果您不想更改專門用於npm
的現有屬性,您可以在jspm
屬性中編寫特定於 jspm 的配置package.json 和jspm 將在根層級配置選項上使用這些選項。
例如:
{
"name" : " my-package " ,
"jspm" : {
"main" : " jspm-main "
}
}
請參閱完整規格。
ignore
如果需要忽略某些特定檔案或資料夾,可以將它們列在陣列中。
format
選項有esm
、 amd
、 cjs
和global
。
從
npm
載入模組時,預設將模組格式視為cjs
,並且不會執行自動偵測。要載入其他格式的模組,您需要手動覆寫此屬性。
package.json 目前未使用模組格式
esm
(ECMAScript 模組)。
registry
jspm 理解註冊表上下文中的依賴關係。
當從 npm 載入套件時,jspm 會將預設註冊表設為npm
,並相應地處理依賴項。
從 GitHub 載入套件時,在不存在登錄屬性的情況下,依賴項屬性將被忽略,因為 jspm 無法知道依賴項對於現有 GitHub 儲存庫意味著什麼。
設定登錄屬性也決定 jspm 如何解釋套件。例如,具有registry: "npm"
GitHub 套件將在從 npm 獲取其依賴項的同時,被解釋為 CommonJS 並支援目錄和 JSON 等功能,就像它一開始就從 npm 端點安裝一樣。
GitHub 上的套件的登錄屬性設定為registry: "jspm"
其依賴項將被視為 jspm 樣式依賴項。
shim
作為全域變數編寫的套件需要填充程式配置才能在模組化環境中正常運作。要在套件中填入檔案some/global.js
,我們可以寫:
{
"shim" : {
"some/global" : {
"deps" : [ " jquery " ],
"exports" : " globalExportName "
}
}
}
deps
和exports
都是可選的。
exports
會被 SystemJS 載入器自動偵測為腳本編寫的任何全域變數。在大多數情況下,這種檢測會正確進行。
如果沒有exports
也支援"some/global": ["jquery"]
。
map
映射配置將重寫內部需求以指向不同的本地或外部模組。
考慮一個包含其自己的依賴項的包, dep
位於third_party/dep
。它內部可能有一個 require 語句,例如:
require ( 'dep' ) ;
為了使用本地版本,我們可以這樣寫:
{
"map" : {
"dep" : " ./third_party/dep "
}
}
在子模組中透過套件自己的名稱引用套件也很有用:
{
"map" : {
"thispackage" : " . "
}
}
然後我們可以正確解析import 'thispackage/module'
的內部需求。
映射配置也可以引用依賴子模組。
我們還可以透過將模組映射到空模組來完全排除模組:
{
"map" : {
"jquery" : " @empty "
}
}
傳回的值將會是一個沒有導出的模組物件。
browserify.transform
文件在這裡
proxy
人們通常從與後端實現相同的主機和連接埠提供前端 React 應用程式。
來源:開發中的代理 API 請求
homepage
來源:建構相對路徑
babel
看到這個問題。
eslintConfig
jest
{
"jest" : {
"verbose" : true
}
}
來源:笑話文檔
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 規範。
less
與style
相同但價格更低。
支持者:npm-less。
以下欄位保留供將來擴充: build
、 default
、 email
、 external
、 files
、 imports
、 maintainer
、 paths
、 platform
、 require
、 summary
、 test
、 using
、 downloads
、 uid
。
以下欄位保留供軟體包註冊表自行決定使用: id
、 type
。
所有以_
或$
開頭的屬性也保留給軟體包註冊表以供其自行決定。
來源:CommonJS 維基
standard
標準 JS 是一個 javaScript 樣式指南、linter 和格式化程序,您可以為 package.json 添加一些屬性,例如parser
、 ignore
、 globals
、 plugins
。
例子:
"standard" : {
"parser" : " babel-eslint " ,
"ignore" : [
" **/out/ " ,
" /lib/select2/ " ,
" /lib/ckeditor/ " ,
" tmp.js "
]
}
另請參閱:標準 JS