package.json詳解

這里只截取了部分常用的選項(xiàng),全部?jī)?nèi)容戳這里

概述

注意package.json必須是純JSON的,而不僅僅是一個(gè)JavaScript對(duì)象字面量。
該文件描述的很多行為都受npm-config中的配置影響。
下面分別介紹package.json中常用字段的含義和用法。

name

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

version

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

version字段必須能夠被node-semver解析,node-semver作為依賴項(xiàng)被捆綁進(jìn)了npm中。(可以使用npm install semver來(lái)使用)

description

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

keywords

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

license

你應(yīng)該對(duì)你的包指定一個(gè)license來(lái)讓用戶知道他們的使用權(quán)利和和任何限制。
如果你正在使用BSD-2-Clause或MIT這樣的通用許可證,可以為你的license添加一個(gè)當(dāng)前SPDX的許可證標(biāo)識(shí)符,比如:
{ "license" : "ISC" }
如果你不希望授權(quán)別人以任何形式使用私有包或未發(fā)布的包,可以這樣寫:
{ "license": "UNLICENSED"}
或者
"private": true
來(lái)防止意外的發(fā)布。

關(guān)于人的字段: author, contributors

author是一個(gè)人,contributors是一些人的數(shù)組。person是一個(gè)對(duì)象,擁有必須的name字段和可選的url和email字段,像這樣:

{
    "name": "BB",
    "email": "bb@react.com",
    "url": "http://bb.cc.com/"
}

或者你也可以使用單個(gè)字符串的精簡(jiǎn)形式,npm會(huì)幫你解析它:
"BB <bb@react.com> (http://bb.cc.com/)"

main

main字段指定了模塊的入口程序文件。就是說(shuō),如果你的模塊名叫"foo",用戶安裝了它,并且調(diào)用了 require("foo"),則這個(gè)main字段指定的模塊的導(dǎo)出對(duì)象會(huì)被返回。

這應(yīng)該是一個(gè)相對(duì)于包根目錄的模塊標(biāo)識(shí)。
對(duì)于大部分模塊來(lái)說(shuō),main字段除了指定一個(gè)主入口文件以外沒什么其他用處了。

scripts

scripts字段是一個(gè)由腳本命令組成的字典,這些命令運(yùn)行在包的各個(gè)生命周期中。這里的鍵是生命周期事件名,值是要運(yùn)行的命令??梢詤⒖?a target="_blank" rel="nofollow">npm-scripts獲取配置scripts的更多信息。

dependencies

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

請(qǐng)不要將測(cè)試或過渡性的依賴放到dependencies中,請(qǐng)參考下面的devDependencies。

可以參考semver獲取更多關(guān)于指定版本范圍的細(xì)節(jié)信息。

  1. version 必須確切匹配這個(gè)version
  2. >version 必須大于這個(gè)version
  3. >=version 必須大于等于這個(gè)version
  4. < version 必須小于這個(gè)version
  5. <=version 必須小于等于這個(gè)version
  6. ~version 大約相當(dāng)于version,參考semver
  7. ^version 與version兼容,參考semver
  8. 1.2.x 可以是1.2.0、1.2.1等,但不能是1.3.0
  9. http://... 參考下面的URL作為依賴項(xiàng)
  10. * 匹配任何版本
  11. ""(空字符串) 匹配任何版本,和*一樣
  12. version1 - version2 相當(dāng)于 >=version1 <=version2
  13. range1 || range2 range1或range2其中一個(gè)滿足時(shí)采用該version
  14. git... 參考下面的Git URL作為依賴項(xiàng)
  15. user/repo 參考下面的GitHub URLs
  16. tag 一個(gè)以tag發(fā)布的指定版本,參考npm-tag
  17. path/path/path 參考下面的本地Paths
    舉個(gè)栗子,下面這種寫法是合法的:
{
    "dependencies": {
        "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",
        "elf": "~1.2.3",
        "two": "2.x",
        "thr": "3.3.x",
        "lat": "latest",
        "dyl": "file:../dyl"
    }
}

devDependencies

如果有人計(jì)劃在他們的項(xiàng)目中下載和使用你的模塊,但他們可能并不想或并不需要你開發(fā)所使用的外部測(cè)試和文檔框架。

在這種情況下,最好將這些附加的項(xiàng)放在devDependencies中。

這些項(xiàng)將會(huì)在根目錄下執(zhí)行npm link或npm install時(shí)被安裝,并且可以像其他npm配置參數(shù)一樣被管理??梢詤⒖?a target="_blank" rel="nofollow">npm-config獲得更多信息。

對(duì)于那些非特定平臺(tái)的構(gòu)建步驟,比如編譯CoffeeScript或把其他語(yǔ)言轉(zhuǎn)換成JavaScript,可以使用prepublish腳本來(lái)處理,并且把這個(gè)過程的依賴包放在devDependencies中。

os

可以指定模塊運(yùn)行的操作系統(tǒng):
"os" : [ "darwin", "linux" ]
也可以使用操作系統(tǒng)黑名單來(lái)替代白名單,只要在前面加個(gè)'!':
"os" : [ "!win32" ]
主機(jī)的操作系統(tǒng)可以通過process.platform來(lái)確定。

雖然找不到什么很好的理由支持這么做,但是這里還可以黑名單和白名單混用。

private

如果你在包的package.json中設(shè)置"private": true,則npm會(huì)拒絕發(fā)布它。

這是防止私有包被以外發(fā)布的一種方法。如果你希望包裝某個(gè)包只能被發(fā)布到特定的一個(gè)registry中(比如,一個(gè)內(nèi)部的registry),則可以使用下面的publishConfig字典來(lái)描述以在publish-time重寫registry配置參數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 原文鏈接:http://www.mujiang.info/translation/npmjs/files/pack...
    R_X閱讀 1,101評(píng)論 0 1
  • npm是什么 NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發(fā)工具...
    build1024閱讀 8,126評(píng)論 0 9
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,362評(píng)論 2 36
  • 1.概述 每個(gè)項(xiàng)目的根目錄下面,一般都有一個(gè)package.json文件,定義了這個(gè)項(xiàng)目所需要的各種模塊,以及項(xiàng)目...
    YINdevelop閱讀 1,480評(píng)論 0 2
  • 描述 npm從以下來(lái)源獲取配置值,按優(yōu)先級(jí)排序: 命令行標(biāo)記 在命令行上放置--foo bar設(shè)置foo配置參數(shù)為...
    竹天亮閱讀 44,494評(píng)論 0 8

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