此文檔是您需要了解的有關(guān) package.json 文件中所需內(nèi)容的全部信息。它必須是實(shí)際的 JSON,而不僅僅是 JavaScript 對(duì)象文字。
本文檔中描述的許多行為受 中描述的配置設(shè)置的影響config
。
姓名
如果您計(jì)劃發(fā)布您的包,您的 package.json 中最重要的內(nèi)容是名稱(chēng)和版本字段,因?yàn)樗鼈兪潜匦璧摹CQ(chēng)和版本共同構(gòu)成一個(gè)標(biāo)識(shí)符,假定該標(biāo)識(shí)符是完全唯一的。對(duì)包的更改應(yīng)該伴隨著對(duì)版本的更改。如果您不打算發(fā)布包,則名稱(chēng)和版本字段是可選的。
名字就是你的東西叫什么。
一些規(guī)則:
名稱(chēng)必須小于或等于 214 個(gè)字符。這包括范圍包的范圍。作用域包的名稱(chēng)可以以點(diǎn)或下劃線開(kāi)頭。這在沒(méi)有范圍的情況下是不允許的。新包的名稱(chēng)中不得包含大寫(xiě)字母。該名稱(chēng)最終成為 URL 的一部分、命令行上的參數(shù)和文件夾名稱(chēng)。因此,名稱(chēng)不能包含任何非 URL 安全字符。一些技巧:
不要使用與核心節(jié)點(diǎn)模塊相同的名稱(chēng)。不要在名稱(chēng)中加入“js”或“node”。假設(shè)它是 js,因?yàn)槟诰帉?xiě) package.json 文件,并且您可以使用“engines”字段指定引擎。(見(jiàn)下文。)該名稱(chēng)可能會(huì)作為參數(shù)傳遞給 require(),因此它應(yīng)該是簡(jiǎn)短的,但也應(yīng)該具有合理的描述性。您可能需要檢查 npm 注冊(cè)表以查看是否已經(jīng)存在使用該名稱(chēng)的內(nèi)容,以免過(guò)于依賴(lài)它。?https://www.npmjs.com/名稱(chēng)可以選擇性地以范圍為前綴,例如`@myorg/mypackage.?請(qǐng)參閱?
scope`了解更多詳情。
版本
如果您計(jì)劃發(fā)布您的包,您的 package.json 中最重要的內(nèi)容是名稱(chēng)和版本字段,因?yàn)樗鼈兪潜匦璧?。名稱(chēng)和版本共同構(gòu)成一個(gè)標(biāo)識(shí)符,假定該標(biāo)識(shí)符是完全唯一的。對(duì)包的更改應(yīng)該伴隨著對(duì)版本的更改。如果您不打算發(fā)布包,則名稱(chēng)和版本字段是可選的。
版本必須可由node-semver解析?,它作為依賴(lài)項(xiàng)與 npm 捆綁在一起。(npm install semver
自己使用。)
描述
把描述放在里面。這是一個(gè)字符串。這有助于人們發(fā)現(xiàn)您的包裹,如 中所列npm search
。
關(guān)鍵詞
把關(guān)鍵字放進(jìn)去。它是一個(gè)字符串?dāng)?shù)組。這有助于人們發(fā)現(xiàn)您的包裹,因?yàn)樗?中列出npm search
。
主頁(yè) 項(xiàng)目主頁(yè)的 url。 例子:
“主頁(yè)” :“https://github.com/owner/project#readme”
錯(cuò)誤 項(xiàng)目問(wèn)題跟蹤器的 url 和/或應(yīng)報(bào)告問(wèn)題的電子郵件地址。這些對(duì)于遇到包裹問(wèn)題的人很有幫助。 它應(yīng)該是這樣的:
{
"url" : "https://github.com/owner/project/issues" ,
“電子郵件” :“project@hostname.com”
}
您可以指定一個(gè)或兩個(gè)值。如果您只想提供一個(gè) url,您可以將“bugs”的值指定為一個(gè)簡(jiǎn)單的字符串而不是一個(gè)對(duì)象。
如果提供了 url,它將被npm bugs
命令使用。
執(zhí)照 你應(yīng)該為你的包指定一個(gè)許可證,以便人們知道他們?nèi)绾伪辉试S使用它,以及你對(duì)它施加的任何限制。 如果您使用的是 BSD-2-Clause 或 MIT 等通用許可證,請(qǐng)為您使用的許可證添加當(dāng)前的 SPDX 許可證標(biāo)識(shí)符,如下所示:
{
“許可證” :“BSD-3-條款”
}
您可以查看SPDX 許可證 ID 的完整列表。理想情況下,您應(yīng)該選擇?OSI批準(zhǔn)的一種。 如果您的軟件包在多個(gè)通用許可下獲得許可,請(qǐng)使用SPDX 許可表達(dá)式語(yǔ)法版本 2.0 string,如下所示:
{
“許可證” :“(ISC 或 GPL-3.0)”
}
如果您使用的許可證尚未分配 SPDX 標(biāo)識(shí)符,或者您使用的是自定義許可證,請(qǐng)使用如下字符串值:
{
"license" : "在 <文件名> 中查看許可證"
}
然后包含一個(gè)<filename>
在包的頂層命名的文件。
一些舊包使用許可證對(duì)象或包含許可證對(duì)象數(shù)組的“許可證”屬性:
// 無(wú)效的元數(shù)據(jù)
{
“許可證” :{
"類(lèi)型" : "ISC" ,
"url" : "https://opensource.org/licenses/ISC"
}
}
// 無(wú)效的元數(shù)據(jù)
{
“許可證” :[
{
“類(lèi)型” :“麻省理工學(xué)院” ,
"url" : "https://www.opensource.org/licenses/mit-license.php"
} ,
{
"type" : "Apache-2.0" ,
"url" : "https://opensource.org/licenses/apache2.0.php"
}
]
}
這些樣式現(xiàn)在已棄用。相反,使用 SPDX 表達(dá)式,如下所示:
{ “許可證” :“ISC” }
{ “許可證” :“(MIT 或 Apache-2.0)” }
最后,如果您不希望根據(jù)任何條款授予他人使用私有或未發(fā)布包的權(quán)利:
{ “許可證” :“未經(jīng)許可” }
還要考慮設(shè)置"private": true
以防止意外發(fā)布。
人員字段:作者、貢獻(xiàn)者 “作者”是一個(gè)人?!柏暙I(xiàn)者”是一群人?!皃erson”是一個(gè)帶有“name”字段和可選的“url”和“email”的對(duì)象,像這樣:
{
"name" : "Barney Rubble" ,
"email" : "b@rubble.com" ,
“網(wǎng)址” :“http://barnyrubble.tumblr.com/”
}
或者,您可以將其全部縮短為一個(gè)字符串,然后 npm 將為您解析它:
{ “作者” :“巴尼瓦礫 <b@rubble.com> (http://barnyrubble.tumblr.com/)” }
email 和 url 都是可選的。 npm 還使用您的 npm 用戶(hù)信息設(shè)置頂級(jí)“維護(hù)者”字段。
資金 您可以指定一個(gè)包含 URL 的對(duì)象,該 URL 提供有關(guān)幫助資助包開(kāi)發(fā)的方法的最新信息,或字符串 URL 或以下內(nèi)容的數(shù)組:
{
“資金” :{
"類(lèi)型" : "個(gè)人" ,
“網(wǎng)址” :“http://example.com/donate”
} ,
“資金” :{
"type" : "patreon" ,
“網(wǎng)址” :“https://www.patreon.com/my-account”
} ,
"funding" : "http://example.com/donate" ,
“資金” :[
{
"類(lèi)型" : "個(gè)人" ,
“網(wǎng)址” :“http://example.com/donate”
} ,
"http://example.com/donateAlso" ,
{
"type" : "patreon" ,
“網(wǎng)址” :“https://www.patreon.com/my-account”
}
]
}
用戶(hù)可以使用npm fund
子命令列出funding
其項(xiàng)目的所有依賴(lài)項(xiàng)的URL,直接和間接。提供項(xiàng)目名稱(chēng)時(shí)還提供訪問(wèn)每個(gè)資助網(wǎng)址的快捷方式,例如:(?npm fund <projectname>
當(dāng)有多個(gè)網(wǎng)址時(shí),將訪問(wèn)第一個(gè))
檔案
可選files
字段是一個(gè)文件模式數(shù)組,它描述了當(dāng)您的包作為依賴(lài)項(xiàng)安裝時(shí)要包含的條目。文件模式遵循與 類(lèi)似的語(yǔ)法.gitignore
,但相反:包含文件、目錄或 glob 模式(*
,**/*
等)將使該文件在打包時(shí)包含在 tarball 中。省略該字段將使其默認(rèn)為["*"]
,這意味著它將包含所有文件。
一些特殊的文件和目錄也會(huì)被包含或排除,無(wú)論它們是否存在于files
數(shù)組中(見(jiàn)下文)。
您還可以.npmignore
在包的根目錄或子目錄中提供一個(gè)文件,以防止文件被包含在內(nèi)。在包的根目錄中,它不會(huì)覆蓋“文件”字段,但在子目錄中會(huì)覆蓋。該.npmignore
文件就像一個(gè).gitignore
.?如果有一個(gè).gitignore
文件并且.npmignore
丟失了,.gitignore
則將使用 的內(nèi)容。
文件包含了“的package.json#文件”欄中無(wú)法通過(guò)排除.npmignore
或.gitignore
。
無(wú)論設(shè)置如何,始終包含某些文件:
package.json``README``LICENSE
?/?LICENCE
“主要”字段中的文件README
&LICENSE
可以有任何大小寫(xiě)和擴(kuò)展名。
相反,一些文件總是被忽略:
.git``CVS``.svn``.hg``.lock-wscript``.wafpickle-N``.*.swp``.DS_Store``._*``npm-debug.log``.npmrc``node_modules``config.gypi``*.orig``package-lock.json
(?npm-shrinkwrap.json
如果您希望發(fā)布,請(qǐng)使用)
主要的
main 字段是一個(gè)模塊 ID,它是程序的主要入口點(diǎn)。也就是說(shuō),如果您的包名為foo
,并且用戶(hù)安裝了它,然后安裝了require("foo")
,那么您的主模塊的導(dǎo)出對(duì)象將被返回。
這應(yīng)該是相對(duì)于包文件夾根目錄的模塊。
對(duì)于大多數(shù)模塊來(lái)說(shuō),擁有一個(gè)主腳本是最有意義的,通常沒(méi)有太多其他的東西。
如果main
未設(shè)置,則默認(rèn)index.js
位于包根文件夾中。
瀏覽器
如果您的模塊打算在客戶(hù)端使用,則應(yīng)使用瀏覽器字段而不是主字段。這有助于提示用戶(hù)它可能依賴(lài)于 Node.js 模塊中不可用的原語(yǔ)。(例如?window
)
垃圾桶
很多包都有一個(gè)或多個(gè)他們想要安裝到 PATH 中的可執(zhí)行文件。npm 使這變得非常簡(jiǎn)單(實(shí)際上,它使用此功能來(lái)安裝“npm”可執(zhí)行文件。)
要使用它,請(qǐng)bin
在 package.json 中提供一個(gè)字段,它是命令名到本地文件名的映射。當(dāng)這個(gè)包被全局安裝時(shí),該文件將被鏈接到全局 bin 所在的位置,因此它可以按名稱(chēng)運(yùn)行。當(dāng)此包作為另一個(gè)包中的依賴(lài)項(xiàng)安裝時(shí),該文件將鏈接到該包可直接通過(guò)npm exec
或通過(guò)其他腳本中的名稱(chēng)通過(guò)npm run-script
.
例如,myapp 可能有這個(gè):
{ “斌” :{ “我的應(yīng)用程序” :“./cli.js” } }
因此,當(dāng)您安裝 myapp 時(shí),它會(huì)創(chuàng)建一個(gè)從cli.js
腳本到/usr/local/bin/myapp
.
如果您有一個(gè)可執(zhí)行文件,并且它的名稱(chēng)應(yīng)該是包的名稱(chēng),那么您可以將其作為字符串提供。例如:
{ "name" : "我的程序" , “版本” :“1.2.5” , "bin" : "./path/to/program" }
將與此相同:
{ "name" : "我的程序" , “版本” :“1.2.5” , “斌” :{ “我的程序” :“./path/to/program” } }
請(qǐng)確保中引用的文件以bin
開(kāi)頭?#!/usr/bin/env node
,否則腳本將在沒(méi)有節(jié)點(diǎn)可執(zhí)行文件的情況下啟動(dòng)!
請(qǐng)注意,您還可以使用directory.bin設(shè)置可執(zhí)行文件。
有關(guān)可執(zhí)行文件的更多信息,請(qǐng)參見(jiàn)文件夾。
男人
指定單個(gè)文件或文件名數(shù)組以供man
程序查找。
如果只提供了一個(gè)文件,那么它會(huì)被安裝為來(lái)自 的結(jié)果man <pkgname>
,而不管其實(shí)際文件名如何。例如:
{ "name" : "foo" , “版本” :“1.2.3” , "description" : "用于 fooing foos 的打包 foo fooer" , "main" : "foo.js" , “人” :“./ man / doc.1” }
將鏈接./man/doc.1
文件,使其成為目標(biāo)man foo
如果文件名不以包名開(kāi)頭,則它是前綴。所以這:
{ "name" : "foo" , “版本” :“1.2.3” , "description" : "用于 fooing foos 的打包 foo fooer" , "main" : "foo.js" , “男人” :[ "./man/foo.1" , “./man/bar.1” ] }
將創(chuàng)建文件來(lái)做man foo
和man foo-bar
。
man 文件必須以數(shù)字結(jié)尾,.gz
如果它們被壓縮,則可以選擇后綴。該數(shù)字指示文件安裝到哪個(gè) man 部分。
{ "name" : "foo" , “版本” :“1.2.3” , "description" : "用于 fooing foos 的打包 foo fooer" , "main" : "foo.js" , “男人” :[ "./man/foo.1" , “./man/foo.2” ] }
將創(chuàng)建條目man foo
和man 2 foo
目錄
CommonJS?Packages規(guī)范詳細(xì)說(shuō)明了一些可以使用directories
對(duì)象指示包結(jié)構(gòu)的方法。如果您查看npm 的 package.json,您會(huì)看到它包含 doc、lib 和 man 目錄。
將來(lái),這些信息可能會(huì)以其他創(chuàng)造性的方式使用。
目錄.bin
如果在 中指定bin
目錄directories.bin
,則將添加該文件夾中的所有文件。
由于bin
指令的工作方式,同時(shí)指定bin
路徑和設(shè)置directories.bin
是錯(cuò)誤的。如果要指定單個(gè)文件,請(qǐng)使用bin
,對(duì)于現(xiàn)有bin
?目錄中的所有文件,請(qǐng)使用directories.bin
。
目錄.man 一個(gè)充滿(mǎn)手冊(cè)頁(yè)的文件夾。Sugar 通過(guò)遍歷文件夾來(lái)生成“man”數(shù)組。
存儲(chǔ)庫(kù)
指定代碼所在的位置。這對(duì)想要貢獻(xiàn)的人很有幫助。如果 git repo 在 GitHub 上,那么該npm docs
?命令將能夠找到您。
像這樣做:
{ “存儲(chǔ)庫(kù)” :{ "類(lèi)型" : "git" , "url" : "https://github.com/npm/cli.git" } }
URL 應(yīng)該是一個(gè)公開(kāi)可用的(可能是只讀的)url,可以直接傳遞給 VCS 程序,無(wú)需任何修改。它不應(yīng)該是您放入瀏覽器的 html 項(xiàng)目頁(yè)面的 url。是給電腦用的。
對(duì)于 GitHub、GitHub gist、Bitbucket 或 GitLab 存儲(chǔ)庫(kù),您可以使用與 相同的快捷語(yǔ)法npm install
:
{ "repository" : "npm/npm" ,
"repository" : "github:user/repo" ,
“存儲(chǔ)庫(kù)” :“要點(diǎn):11081aaa281” ,
"repository" : "bitbucket:user/repo" ,
“存儲(chǔ)庫(kù)” :“gitlab:用戶(hù)/倉(cāng)庫(kù)” }
如果package.json
您的包的 不在根目錄中(例如,如果它是 monorepo 的一部分),您可以指定它所在的目錄:
{ “存儲(chǔ)庫(kù)” :{ "類(lèi)型" : "git" , "url" : "https://github.com/facebook/react.git" , “目錄” :“包/react-dom” } }
腳本
“scripts”屬性是一個(gè)字典,其中包含在包生命周期中的不同時(shí)間運(yùn)行的腳本命令。鍵是生命周期事件,值是在該點(diǎn)運(yùn)行的命令。
請(qǐng)參閱scripts
以了解有關(guān)編寫(xiě)包腳本的更多信息。
配置 “config”對(duì)象可用于設(shè)置在升級(jí)過(guò)程中持續(xù)存在的包腳本中使用的配置參數(shù)。例如,如果一個(gè)包具有以下內(nèi)容:
{ "name" : "foo" , “配置” :{ “端口” :“8080” } }
它也可以有一個(gè)引用npm_package_config_port
環(huán)境變量的“啟動(dòng)”命令?。
依賴(lài)
依賴(lài)項(xiàng)在一個(gè)簡(jiǎn)單的對(duì)象中指定,該對(duì)象將包名稱(chēng)映射到版本范圍。版本范圍是一個(gè)字符串,它具有一個(gè)或多個(gè)以空格分隔的描述符。依賴(lài)項(xiàng)也可以用 tarball 或 git URL 來(lái)標(biāo)識(shí)。
請(qǐng)不要在您的dependencies
對(duì)象中放置測(cè)試工具或轉(zhuǎn)譯器或其他“開(kāi)發(fā)”時(shí)間工具。?見(jiàn)devDependencies
,下面。
有關(guān)指定版本范圍的更多詳細(xì)信息,請(qǐng)參閱semver。
version
必須version
完全匹配>version
?必須大于?version``>=version
?等等<version``<=version``~version
“大約相當(dāng)于版本”見(jiàn)?semver^version
“兼容版本”見(jiàn)semver1.2.x
?1.2.0、1.2.1 等,但不是 1.3.0http://...
?請(qǐng)參閱下面的“作為依賴(lài)項(xiàng)的 URL”*
?匹配任何版本""
?(只是一個(gè)空字符串)與?*``version1 - version2
一樣>=version1 <=version2
。range1 || range2
?如果滿(mǎn)足 range1 或 range2,則通過(guò)。git...
?請(qǐng)參閱下面的“作為依賴(lài)項(xiàng)的 Git URL”user/repo
?請(qǐng)參閱下面的“GitHub URL”tag
標(biāo)記并發(fā)布為tag
?See 的特定版本npm dist-tag``path/path/path
請(qǐng)參閱下面的本地路徑例如,這些都是有效的:
{ “依賴(lài)關(guān)系” :{ "foo" : "1.0.0 - 2.9999.9999" , "bar" : ">=1.0.2 <2.1.2" , "baz" : ">1.0.2 <=2.3.4" , "boo" : "2.0.1" , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0" , "asd" : "http://asdf.com/asdf.tar.gz" , "til" : "~1.2" , "小精靈" : "~1.2.3" , "二" : "2.x" , "thr" : "3.3.x" , "lat" : "最新的" , "dyl" : "文件:../dyl" } }
URL 作為依賴(lài)項(xiàng) 您可以指定一個(gè) tarball URL 來(lái)代替版本范圍。 這個(gè) tarball 將在安裝時(shí)下載并安裝到本地包中。
Git URL 作為依賴(lài)項(xiàng) Git 網(wǎng)址的格式為:
<協(xié)議> :// [ <用戶(hù)> [ :<密碼> ] @ ] <主機(jī)名> [ :<端口> ] [ :] [ / ] <路徑> [ #<commit-ish> | #semver:<semver>]
<protocol>
是以下之一git
,git+ssh
,git+http
,git+https
,或?git+file
。
如果#<commit-ish>
提供,它將用于準(zhǔn)確克隆該提交。如果 commit-ish 具有格式#semver:<semver>
,<semver>
可以是任何有效的 semver 范圍或確切版本,并且 npm 將在遠(yuǎn)程存儲(chǔ)庫(kù)中查找與該范圍匹配的任何標(biāo)簽或引用,就像查找注冊(cè)表依賴(lài)項(xiàng)一樣。如果兩者都未指定#<commit-ish>
或未#semver:<semver>
指定,則master
使用。
例子:
git+ssh://git@github.com:npm/cli.git #v1.0.27 git+ssh://git@github.com:npm/cli #semver:^5.0 git+https://isaacs@github.com/npm/cli.git git://github.com/npm/cli.git #v1.0.27
GitHub 網(wǎng)址
從 1.1.65 版本開(kāi)始,您可以將 GitHub 網(wǎng)址稱(chēng)為“foo”:“user/foo-project”。就像 git URL 一樣,commit-ish
可以包含后綴。例如:
{ "name" : "foo" , “版本” :“0.0.0” , “依賴(lài)關(guān)系” :{ "express" : "expressjs/express" , "mocha" : "mochajs/mocha#4727d357ea" , “模塊” :“用戶(hù)/repo#feature\/branch” } }
本地路徑
從版本 2.0.0 開(kāi)始,您可以提供包含包的本地目錄的路徑。可以使用npm install -S
或保存本地路徑npm install --save
,使用以下任何形式:
.. /foo/bar ~/foo/bar ./foo/bar /foo/bar
在這種情況下,它們將被標(biāo)準(zhǔn)化為相對(duì)路徑并添加到您的?package.json
.?例如:
{ "name" : "baz" , “依賴(lài)關(guān)系” :{ “bar” :“文件:../foo/bar” } }
此功能有助于本地離線開(kāi)發(fā)和創(chuàng)建需要在不想訪問(wèn)外部服務(wù)器的地方安裝 npm 的測(cè)試,但不應(yīng)在將包發(fā)布到公共注冊(cè)表時(shí)使用。
開(kāi)發(fā)依賴(lài)
如果有人計(jì)劃在他們的程序中下載和使用您的模塊,那么他們可能不想或不需要下載和構(gòu)建您使用的外部測(cè)試或文檔框架。
在這種情況下,最好將這些附加項(xiàng)目映射到一個(gè)?devDependencies
對(duì)象中。
這些東西將在執(zhí)行時(shí)npm link
或npm install
從包的根目錄安裝,并且可以像任何其他 npm 配置參數(shù)一樣進(jìn)行管理。有關(guān)config
該主題的更多信息,請(qǐng)參閱。
對(duì)于非特定于平臺(tái)的構(gòu)建步驟,例如將 CoffeeScript 或其他語(yǔ)言編譯為 JavaScript,請(qǐng)使用prepare
腳本執(zhí)行此操作,并使所需的包成為 devDependency。
例如:
{ "name" : "ethopia-waza" , “描述” :“令人愉悅的果味咖啡品種” , “版本” :“1.2.3” , “開(kāi)發(fā)依賴(lài)” :{ “咖啡腳本” :“~1.6.3” } , “腳本” :{ “準(zhǔn)備” :“咖啡-o lib/-c src/waza.coffee” } , "main" : "lib/waza.js" }
該prepare
腳本將在發(fā)布之前運(yùn)行,以便用戶(hù)無(wú)需自行編譯即可使用該功能。在開(kāi)發(fā)模式下(即本地運(yùn)行npm install
),它也會(huì)運(yùn)行這個(gè)腳本,以便您可以輕松測(cè)試它。
對(duì)等依賴(lài)
在某些情況下,您希望表達(dá)您的包與主機(jī)工具或庫(kù)的兼容性,而不必執(zhí)行require
此主機(jī)的操作。這通常稱(chēng)為插件。值得注意的是,您的模塊可能會(huì)公開(kāi)主機(jī)文檔所預(yù)期和指定的特定接口。
例如:
{ "name" : "拿鐵茶" , “版本” :“1.3.5” , “peerDependencies” :{ “茶” :“2.x” } }
這確保您的軟件包tea-latte
只能與主機(jī)軟件包的第二個(gè)主要版本一起安裝tea
。npm install tea-latte
可能會(huì)產(chǎn)生以下依賴(lài)圖:
├── 拿鐵茶@1.3.5 └── 茶@2.2.0
在 npm 版本 3 到 6 中,peerDependencies
不會(huì)自動(dòng)安裝,如果在樹(shù)中發(fā)現(xiàn)對(duì)等依賴(lài)項(xiàng)的無(wú)效版本,則會(huì)發(fā)出警告。由于NPM V7的,peerDependencies被?默認(rèn)安裝。
如果無(wú)法正確解析樹(shù),嘗試安裝具有沖突要求的另一個(gè)插件可能會(huì)導(dǎo)致錯(cuò)誤。因此,請(qǐng)確保您的插件要求盡可能廣泛,而不是將其鎖定為特定的補(bǔ)丁版本。
假設(shè)主機(jī)符合semver,只有主機(jī)包的主要版本中的更改才會(huì)破壞您的插件。因此,如果您使用過(guò)主機(jī)包的每個(gè) 1.x 版本,請(qǐng)使用"^1.0"
或"1.x"
?來(lái)表達(dá)這一點(diǎn)。如果您依賴(lài) 1.5.2 中引入的功能,請(qǐng)使用?"^1.5.2"
.
對(duì)等依賴(lài)元
當(dāng)用戶(hù)安裝您的軟件包時(shí),如果 中指定的軟件包peerDependencies
尚未安裝,npm 將發(fā)出警告。該?peerDependenciesMeta
字段用于為 npm 提供有關(guān)如何使用對(duì)等依賴(lài)項(xiàng)的更多信息。具體來(lái)說(shuō),它允許對(duì)等依賴(lài)項(xiàng)標(biāo)記為可選。
例如:
{ "name" : "拿鐵茶" , “版本” :“1.3.5” , “peerDependencies” :{ "茶" : "2.x" , “豆?jié){” :“1.2” } , “peerDependenciesMeta” :{ “豆?jié){” :{ “可選” :真 } } }
將對(duì)等依賴(lài)項(xiàng)標(biāo)記為可選可確保soy-milk
在主機(jī)上未安裝軟件包時(shí)npm 不會(huì)發(fā)出警告。這允許您集成各種主機(jī)包并與之交互,而無(wú)需安裝所有主機(jī)包。
捆綁依賴(lài)
這定義了在發(fā)布包時(shí)將捆綁的包名稱(chēng)數(shù)組。
如果您需要在本地保留 npm 包或通過(guò)單個(gè)文件下載使它們可用,您可以通過(guò)在bundledDependencies
?數(shù)組中指定包名稱(chēng)并執(zhí)行npm pack
.
例如:
如果我們像這樣定義 package.json:
{ "name" : "awesome-web-framework" , “版本” :“1.0.0” , “捆綁依賴(lài)” :[ “渲染” , “超級(jí)流” ] }
我們可以awesome-web-framework-1.0.0.tgz
通過(guò)運(yùn)行獲取文件npm pack
。此文件包含的依賴(lài)關(guān)系renderized
,并super-streams
可以通過(guò)執(zhí)行安裝在一個(gè)新的項(xiàng)目npm install awesome-web-framework-1.0.0.tgz
。請(qǐng)注意,包名稱(chēng)不包含任何版本,因?yàn)樵撔畔⒃?code>dependencies.
如果這是拼寫(xiě)"bundleDependencies"
,那么這也很榮幸。
可選依賴(lài)項(xiàng)
如果可以使用依賴(lài)項(xiàng),但如果找不到或安裝失敗,您希望 npm 繼續(xù),那么您可以將其放入?optionalDependencies
對(duì)象中。這是包名稱(chēng)到版本或 url 的映射,就像dependencies
對(duì)象一樣。不同之處在于構(gòu)建失敗不會(huì)導(dǎo)致安裝失敗。運(yùn)行npm install --no-optional
將阻止安裝這些依賴(lài)項(xiàng)。
處理缺少依賴(lài)項(xiàng)仍然是您的程序的責(zé)任。例如,這樣的事情:
試試{
var foo =要求('foo' )
var fooVersion = require ( 'foo/package.json' ) 。版本
}趕上(呃){
foo =空
}
如果( notGoodFooVersion ( fooVersion ) ) {
foo =空
}
// .. 然后在你的程序中..
如果(富){
富。doFooThings ( )
}
中的條目optionalDependencies
將覆蓋 中的同名條目?dependencies
,因此通常最好只放在一個(gè)地方。
引擎 您可以指定您的東西適用的節(jié)點(diǎn)版本:
{ “引擎” :{ “節(jié)點(diǎn)” :“>=0.10.3 <15” } }
而且,與依賴(lài)項(xiàng)一樣,如果您不指定版本(或者如果您指定“?*?”作為版本),那么任何版本的節(jié)點(diǎn)都可以。 您還可以使用“引擎”字段來(lái)指定哪些版本的 npm 能夠正確安裝您的程序。例如:
{ “引擎” :{ “npm” :“~1.0.20” } }
除非用戶(hù)設(shè)置了engine-strict
config 標(biāo)志,否則這個(gè)字段只是建議性的,只有當(dāng)你的包作為依賴(lài)項(xiàng)安裝時(shí)才會(huì)產(chǎn)生警告。
操作系統(tǒng) 您可以指定您的模塊將在哪些操作系統(tǒng)上運(yùn)行:
{ “操作系統(tǒng)” :[ “達(dá)爾文” , “Linux” ] }
您還可以阻止而不是允許操作系統(tǒng),只需在被阻止的操作系統(tǒng)前面加上一個(gè)“!”:
{ “操作系統(tǒng)” :[ “!win32” ] }
主機(jī)操作系統(tǒng)由?process.platform
允許阻止和允許一個(gè)項(xiàng)目,盡管沒(méi)有任何充分的理由這樣做。
中央處理器 如果您的代碼僅在某些 CPU 架構(gòu)上運(yùn)行,您可以指定哪些架構(gòu)。
{ “CPU” :[ "x64" , “ia32” ] }
與該os
選項(xiàng)一樣,您還可以阻止架構(gòu):
{ “CPU” :[ "!arm" , “!mips” ] }
主機(jī)架構(gòu)由?process.arch
私人的
如果你"private": true
在 package.json 中設(shè)置,那么 npm 將拒絕發(fā)布它。
這是一種防止意外發(fā)布私有存儲(chǔ)庫(kù)的方法。如果您想確保給定的包只發(fā)布到特定的注冊(cè)表(例如,內(nèi)部注冊(cè)表),請(qǐng)使用publishConfig
下面描述的?字典registry
?在發(fā)布時(shí)覆蓋配置參數(shù)。
發(fā)布配置
這是一組將在發(fā)布時(shí)使用的配置值。如果您想設(shè)置標(biāo)記、注冊(cè)表或訪問(wèn)權(quán)限,這將特別方便,這樣您就可以確保給定的包沒(méi)有被標(biāo)記為“最新”、未發(fā)布到全局公共注冊(cè)表或默認(rèn)情況下范圍模塊是私有的。
查看config
可覆蓋的配置選項(xiàng)列表。
工作空間
可選workspaces
字段是一個(gè)文件模式數(shù)組,它描述了本地文件系統(tǒng)內(nèi)的位置,安裝客戶(hù)端應(yīng)該查找這些位置以找到需要符號(hào)鏈接到頂級(jí)文件夾的每個(gè)工作區(qū)node_modules
。
它可以描述要用作工作區(qū)的文件夾的直接路徑,也可以定義將解析為這些相同文件夾的 glob。
在以下示例中,./packages
只要文件夾中包含有效package.json
文件,位于文件夾內(nèi)的所有文件夾?都將被視為工作區(qū)?:
{ "name" : "工作區(qū)示例" , “工作區(qū)” :[ “./包/*” ] }
有關(guān)workspaces
更多示例,請(qǐng)參見(jiàn)。
默認(rèn)值
npm 將根據(jù)包內(nèi)容默認(rèn)一些值。
"scripts": {"start": "node server.js"}
如果server.js
包的根目錄中有一個(gè)文件,那么 npm 會(huì)將start
命令默認(rèn)為node server.js
.
"scripts":{"install": "node-gyp rebuild"}
如果binding.gyp
你的包根目錄中有一個(gè)文件并且你沒(méi)有定義install
或preinstall
腳本,npm 將默認(rèn)?install
使用 node-gyp 編譯命令。
"contributors": [...]
如果AUTHORS
包的根目錄中有一個(gè)文件,npm 會(huì)將每一行視為一種Name <email> (url)
格式,其中 email 和 url 是可選的。以 a#
或開(kāi)頭的空白行將被忽略。
更多建議: