package.json各參數(shù)字段

前言

  • package.json是每個npm包、基于node的項目中必不可少的配置文件,這里將詳細介紹出現(xiàn)在package.json中的各個參數(shù)。參考自官方文檔

name

  • npm包的名稱,在你打算發(fā)布一個npm包時,name字段和version字段是必不可少的,并且必須是唯一的。而如果你并不是打算發(fā)布npm包的話,nameversion字段都是可缺省的。name的命名規(guī)范如下:
    • 長度必須小于等于214個字符
    • 不能以"."或"_"開頭
    • 不能用大寫字母
    • 這個name字段最后會用作為URL的一部分、文件夾名稱、以及命令行的參數(shù)。因此,不能包含對URL不安全的字符。

version

  • name一樣,當你打算發(fā)布npm包時,versionname會作為包的唯一標識符。不打算發(fā)布npm包,則可以缺省。
  • version必須經(jīng)過node-semver解析,這是一個npm官方發(fā)布的一個關于version描述規(guī)范的npm包。

description

  • 一個string字段描述你的npm包,幫助其他人在npm search的時候發(fā)現(xiàn)你的npm包。

keywords

  • 一個字符串組成的數(shù)組字段,幫助其他人在npm search的時候發(fā)現(xiàn)你的npm包

homepage

  • 一個表示項目首頁的url,一般是GitHub項目地址下的readme.md

bugs

  • 一個表示接收問題反饋的url地址,也可以是email地址。一般是Github項目下的issues。

license

  • 用于聲明你的npm包使用的license,以便使用者知道該如何使用你的包,以及哪些限制的地方。

author

  • 包的作者的信息

contributors

  • 包的貢獻者們的信息

files

  • 可缺省。用于描述當你的npm包被依賴時,一組用來描述包含的文件條目的文件模式(file pattern),描述語法與.gitignore的相似。

main

  • main字段,用于描述你的npm包項目的主要入口文件。
  • 比如你的包名稱為foo,別人安裝了你的包并用require('foo')引入包時,其實就是引入的main字段里描述的文件。
  • 對于很多npm包來說,main字段是必須的,其他都無所謂了。

browser

  • 如果你的包打算是用在客戶端的瀏覽器環(huán)境中,那么就應該用browser字段來代替main字段。這樣來提示用戶,包里面的代碼可能會依賴一些node環(huán)境中不存在的內(nèi)容(比如window對象)。

bin

  • 許多npm包中有一些想要安裝到PATH里的可執(zhí)行文件。在bin字段,可以定義一組由命令行命令可執(zhí)行文件目錄為鍵值對組成的對象。
  • 在你安裝這個npm包時,全局安裝的情況,bin字段就可以全局調(diào)用(會被安裝到prefix/bin),本地安裝的話,則會把bin字段里定義的命令添加到當前項目的./node_modules/.bin/里。然后就可以在命令行直接執(zhí)行這些命令,本質(zhì)上就是執(zhí)行對應的可執(zhí)行文件。
  • 舉個例子:myapp包里面的package.json有這樣的配置:{ "bin" : { "myapp" : "./cli.js" } },那么在安裝好myapp之后,就會生成一個cli.js文件與/usr/local/bin/myapp之間的映射關系。即執(zhí)行myapp命令,就是在執(zhí)行cli.js文件

man

  • 指定一個單個文件或者一個由數(shù)個文件組成的數(shù)組,這些事為man命令準備的。
  • 比如你的包的package.json如下:
{ "name" : "foo"
, "version" : "1.2.3"
, "description" : "A packaged foo fooer for fooing foos"
, "main" : "foo.js"
, "man" : "./man/doc.1"
}
  • 那么在安裝完npm包后,執(zhí)行man foo就會去打開./man/doc.1文檔顯示。這些文件命名,都以數(shù)字命名,來表示分別安裝到哪一個man section,如果文件是壓縮后的,還要加上.gz后綴。

repository

  • 指明你的項目源代碼倉庫所在位置,這有助于其他人為你的項目貢獻(contribute)代碼,如果你的git項目是托管在GitHub上的,那么npm docs命令是能夠找到的。
  • 像下面這樣設置:
"repository" :
  { "type" : "git"
  , "url" : "https://github.com/npm/npm.git"
  }
  • 如果使用的svn則像這樣:
"repository" :
  { "type" : "svn"
  , "url" : "https://v8.googlecode.com/svn/trunk/"
  }
  • url字段應該為一個公共的可訪問的URL地址,這個URL地址可以直接交給版本控制系統(tǒng)(VCS)處理,這不應該是一個你的項目頁面的html地址,它不是提供給瀏覽器的,而是提供給計算機的。
  • type則是表明,VCS的類型,一般都是用的git。

scripts

  • script字段是一個包含腳本命令的詞典(dictionary),key值為生命周期的事件(lifecycle event)/或者自定義的命令,value值為具體的需要執(zhí)行的命令。
  • 參考npm-scripts,查看具體的生命周期以及關于scripts屬性詳細的說明。
  • 下面舉個簡單的示例:
{ "scripts" :
  { "install" : "scripts/install.js", 
    "postinstall" : "scripts/install.js",
    "uninstall" : "scripts/uninstall.js",
    "build": "node scripts/build.js"
  }
}
  • 上面前三個是npm安裝的生命周期事件,比如install就表示,在安裝npm包時執(zhí)行后面的命令。而最后一個build就是自定義的命令了,可以用npm run build來執(zhí)行,相當于是執(zhí)行node scripts/build.js

config

  • config對象用來設置一些用于npm包的腳本命令會用到的配置參數(shù)。查看npm-config了解更多。

dependencies

  • dependencies屬性是一個簡單的對象,包含了npm包名字與版本范圍(version range)的映射。版本范圍是一個字符串,包含了一個或多個描述符。dependencies同樣可以用一個tarball或git url來定義。
  • 測試用的包或編譯代碼的包不應該放在dependencies對象,而應該放在devDependencies里。
  • 下面是一些版本范圍的描述符
    • version 版本號必須嚴格匹配等于version
    • >version 版本號必須比version大
    • >=version 大于等于
    • <version 小于
    • <=version 小于等于
    • ~version "近似等價于version" 參考semver
    • ^version "與version相兼容" 參考semver
    • 1.2.x 1.2開頭的版本號都可以,1.2.0、1.2.1等等,但不能是1.1或1.3其他的。
      • 匹配任意版本號
    • "" 空字符串與 * 相同
    • version1 - version2 相當于 >=version1 <=version2.
    • range1 || range2 range1和range2其中一個版本號.

devDependencies

  • devDependencies結構和dependencies相似,但是都是開發(fā)時所依賴的包,如果別人只是使用或下載你的npm包,就不需要安裝這里面的

engine

  • engine字段用來表示,你的項目所運行的node版本。不指定engine字段,或者用*表示不限制node版本。

os

  • os字段表示你的npm包要在哪個操作系統(tǒng)上面運行

cpu

  • 如果你的包需要運行在某些特定的CPU架構,則用cpu字段來描述。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評論 19 139
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,370評論 2 36
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,832評論 9 468
  • name 必須字段。提示: 不要在name中包含 js、 node 字樣; 這個名字最終會是 URL 的一部分,命...
    djyuning閱讀 1,490評論 0 1
  • 昨天在補辦護照,辦理跟繳費在不同窗口,排我前面的前面是一個老爺爺,他在辦港澳通行證,等他辦好,準備去繳費的時候發(fā)現(xiàn)...
    Jinyuba閱讀 330評論 4 0

友情鏈接更多精彩內(nèi)容