package.json參數(shù)詳解

package.json必須是純JSON的,而不僅僅是一個(gè)JavaScript對(duì)象字面量猜拾。

name和version

name和version字段是package.json文件中最重要的字段府适。這是必須的字段羔飞,如果你的npm包沒有指定這兩個(gè)字段,將無法被安裝檐春。name和version字段被假定組合成一個(gè)唯一的 標(biāo)識(shí)符逻淌。包內(nèi)容的更改和包版本的更改是同步的。

description

npm包的描述疟暖,description是一個(gè)字符串卡儒。它可以幫助人們?cè)谑褂胣pm search時(shí)找到這個(gè)包。

keywords

npm包的關(guān)鍵字俐巴,keywords是一個(gè)字符串的數(shù)組骨望。它可以幫助人們?cè)谑褂胣pm search時(shí)找到這個(gè)包。

homepage

項(xiàng)目主頁的url

bugs

改項(xiàng)目的issue跟蹤頁面或這報(bào)告issue的email地址窜骄。這對(duì)使用這個(gè)包遇到問題的用戶會(huì)有幫助锦募。

license

證書許可。SPDX表達(dá)式:
{ "license": "ISC" }
{ "license": "(MIT OR Apache-2.0)" }
通常我們不希望授權(quán)別人以任何形式使用的私有包或未發(fā)布包邻遏,可以這樣寫:
{ "license": "UNLICENSED"}或者設(shè)置"private": true

author, contributors

關(guān)于人的字段

files

files字段是一個(gè)被項(xiàng)目包含的文件名數(shù)組糠亩,如果你在里面放一個(gè)文件夾名虐骑,那么這個(gè)文件夾中的所有文件都會(huì)被包含進(jìn)項(xiàng)目中(除非是那些在其他規(guī)則中被忽略的文件)。

main

main字段指定了模塊的入口程序文件赎线。就是說廷没,如果你的模塊名叫"foo",用戶安裝了它垂寥,并且調(diào)用了 require("foo")颠黎,則這個(gè)main字段指定的模塊的導(dǎo)出對(duì)象會(huì)被返回。
例如node_modules中引入的模塊指定主入口文件

bin

許多包有一個(gè)或多個(gè)可執(zhí)行文件希望被安裝到系統(tǒng)路徑滞项。提供一個(gè)bin字段狭归,它是一個(gè)命令名和本地文件名的映射。在安裝時(shí)文判,如果是全局安裝过椎,npm將會(huì)使用符號(hào)鏈接把這些文件鏈接到prefix/bin,如果是本地安裝戏仓,會(huì)鏈接到./node_modules/.bin/疚宇。

比如,要使用myapp作為命令時(shí)可以這么做:
{ "bin" : { "myapp" : "./cli.js" } }
當(dāng)安裝完畢myapp赏殃,npm會(huì)從cli.js文件創(chuàng)建一個(gè)到/usr/local/bin/myapp的符號(hào)鏈接(這使你可以直接在命令行執(zhí)行myapp)敷待。

man

指定一個(gè)單一的文件名或一個(gè)文件名數(shù)組來讓man程序使用。如果只給man字段提供一個(gè)文件仁热,則安裝完畢后榜揖,它就是man <pkgname>的結(jié)果,這和此文件名無關(guān)

directories

CommonJS Packages規(guī)范說明了幾種你可以用directories對(duì)象來標(biāo)示你的包結(jié)構(gòu)的方法(lib股耽、bin根盒、man钳幅、doc物蝙、example)

repository

指明你的代碼被托管在何處,這對(duì)那些想要參與到這個(gè)項(xiàng)目中的人來說很有幫助敢艰。如果git倉庫在github上诬乞,用npm docs命令將會(huì)找到你。

scripts

scripts字段是一個(gè)由腳本命令組成的字典钠导,這些命令運(yùn)行在包的各個(gè)生命周期中震嫉。這里的鍵是生命周期事件名,值是要運(yùn)行的命令牡属。

config

config字段是一個(gè)對(duì)象票堵,可以用來配置包腳本中的跨版本參數(shù)。

dependencies

dependencies字段是一個(gè)對(duì)象逮栅,它指定了依賴的包名和其版本范圍的映射悴势。版本范圍是個(gè)有一個(gè)或多個(gè)空白分隔描述符的字符串窗宇。dependencies字段還可以用tarball或者git URL。

(請(qǐng)不要將測試或過渡性的依賴放到dependencies中)

devDependencies

如果有人計(jì)劃在他們的項(xiàng)目中下載和使用你的模塊特纤,但他們可能并不想或并不需要你開發(fā)所使用的外部測試和文檔框架军俊。
在這種情況下,最好將這些附加的項(xiàng)放在devDependencies中捧存。即開發(fā)模式下的依賴粪躬。

peerDependencies

在某些情況下,當(dāng)一個(gè)主機(jī)無法require依賴包時(shí)昔穴,你會(huì)想要告訴它還有哪些工具或庫與這個(gè)依賴包兼容镰官。這通常被成為一個(gè)插件。尤其是在host文檔中聲明的模塊會(huì)暴露一個(gè)特定的接口吗货。

bundledDependencies

在發(fā)布包時(shí)朋魔,包名的數(shù)組會(huì)被打包進(jìn)去。

optionalDependencies

如果一個(gè)依賴項(xiàng)可用卿操,但希望在這個(gè)依賴項(xiàng)無法被找到或者安裝時(shí)失敗npm還能繼續(xù)處理(不中斷)警检,那么你可以把它放在optionalDependencies中。和dependencies一樣害淤,optionalDependencies是一個(gè)包名和版本號(hào)或url的映射扇雕。區(qū)別在于optionalDependencies中的依賴構(gòu)建失敗時(shí)不會(huì)導(dǎo)致npm整體安裝失敗。

但是你的程序依然有責(zé)任處理這種缺失的依賴項(xiàng)窥摄,例如

try{
    var foo=require('foo')
    var fooVersion=require('foo/package.json').version
}catch(er){
    foo=null
}if(notGoodFooVersion(fooVersion)){
    foo=null
}//..thenlaterinyourprogram..if(foo){
    foo.doFooThings()
}

optionalDependencies中的項(xiàng)會(huì)覆蓋dependencies中的同名項(xiàng)镶奉,所以一個(gè)特定名字的項(xiàng)最好只出現(xiàn)在一個(gè)地方。

engines

你可以指定node的工作版本:
{ "engines" : { "node" : ">=0.10.3 <0.12" } }

os

可以指定模塊運(yùn)行的操作系統(tǒng):"os" : [ "darwin", "linux" ]
也可以使用操作系統(tǒng)黑名單來替代白名單崭放,只要在前面加個(gè)'!':
"os" : [ "!win32" ]

cpu

指明只能運(yùn)行在特定的cpu架構(gòu)上

preferGlobal

如果你的包是一個(gè)需要進(jìn)行全局安裝的命令行應(yīng)用哨苛,需要設(shè)置preferGlobal為true,如果這個(gè)包被本地安裝會(huì)報(bào)出一個(gè)警告币砂。
這個(gè)選項(xiàng)并不會(huì)阻止用戶本地安裝這個(gè)包建峭,但這么做確實(shí)能在包未按照預(yù)期被安裝造成諸多麻煩時(shí)提供一些提示。

private

如果你在包的package.json中設(shè)置"private": true决摧,則npm會(huì)拒絕發(fā)布它亿蒸。這是防止私有包被以外發(fā)布的一種方法。

publishConfig

這是一個(gè)在publish-time時(shí)會(huì)用到的配置集合掌桩。當(dāng)你想設(shè)置tag边锁、registry或access時(shí)特別有用,所以你可以確保一個(gè)給定的包無法在沒有被打上"latest"標(biāo)記時(shí)就被發(fā)布到全局公共的registry波岛。
任何配置都可以被覆蓋茅坛,當(dāng)然可能只有"tag", "registry"和"access"和發(fā)布意圖有關(guān)。


總結(jié)心得

npm init基本能完成一個(gè)項(xiàng)目基礎(chǔ)的構(gòu)建则拷。日常開發(fā)private:true然后管理好依賴贡蓖,寫好scripts基本就可以了祟剔。
但是如果要開發(fā)一個(gè)開源項(xiàng)目。peerDependencies摩梧、license、repository以及一些額外的bugs仅父、homepage之類細(xì)化的東西都要熟悉了解叛薯。


參考

(譯)package.json詳解
Package.json 簡介

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笙纤,隨后出現(xiàn)的幾起案子洒放,更是在濱河造成了極大的恐慌,老刑警劉巖滨砍,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件往湿,死亡現(xiàn)場離奇詭異,居然都是意外死亡惋戏,警方通過查閱死者的電腦和手機(jī)领追,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來响逢,“玉大人绒窑,你說我怎么就攤上這事×渚洌” “怎么了回论?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵散罕,是天一觀的道長分歇。 經(jīng)常有香客問我,道長欧漱,這世上最難降的妖魔是什么职抡? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮误甚,結(jié)果婚禮上缚甩,老公的妹妹穿的比我還像新娘谱净。我一直安慰自己,他們只是感情好擅威,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布壕探。 她就那樣靜靜地躺著,像睡著了一般郊丛。 火紅的嫁衣襯著肌膚如雪李请。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天厉熟,我揣著相機(jī)與錄音导盅,去河邊找鬼。 笑死揍瑟,一個(gè)胖子當(dāng)著我的面吹牛白翻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绢片,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滤馍,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了底循?” 一聲冷哼從身側(cè)響起纪蜒,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎此叠,沒想到半個(gè)月后纯续,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灭袁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年猬错,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茸歧。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倦炒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出软瞎,到底是詐尸還是另有隱情逢唤,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布涤浇,位于F島的核電站鳖藕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏只锭。R本人自食惡果不足惜著恩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喉誊,春花似錦邀摆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敷矫,卻和暖如春贞盯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沪饺。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國打工躏敢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人整葡。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓件余,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遭居。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啼器,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 package.json是每個(gè)npm包、基于node的項(xiàng)目中必不可少的配置文件俱萍,這里將詳細(xì)介紹出現(xiàn)在pack...
    ITgecko閱讀 4,069評(píng)論 0 4
  • 原文鏈接:http://www.mujiang.info/translation/npmjs/files/pack...
    R_X閱讀 1,032評(píng)論 0 1
  • 什么是 NPM npm之于Node端壳,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,250評(píng)論 2 36
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理枪蘑,服務(wù)發(fā)現(xiàn)损谦,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 今天 也許是因?yàn)槠碛瓿晒α税?下雨了 可是我去醫(yī)務(wù)室的腳步還沒有停下來
    赫本_1973閱讀 207評(píng)論 0 0