package.json文件說明解釋

一、package.json是什麼?

       什麼是Node.js的模塊(Module)?在Node.js中,模塊是一個庫或框架,也是一個Node.js項目。Node.js項目遵循模塊化的架構,當咱們建立了一個Node.js項目,意味着建立了一個模塊,這個模塊的描述文件,被稱爲package.json。
       一般狀況下package.json內容出錯,會致使項目出現bug,甚至阻止項目的運行。下面是normalize包的package.json文件:javascript

{
  "name": "normalize.css",
  "version": "3.0.3",
  "description": "Normalize.css as a node packaged module",
  "style": "normalize.css",
  "files": [
    "LICENSE.md",
    "normalize.css"
  ],
  "homepage": "http://necolas.github.io/normalize.css",
  "repository": {
    "type": "git",
    "url": "git://github.com/necolas/normalize.css.git"
  },
  "main": "normalize.css",
  "author": {
    "name": "Nicolas Gallagher"
  },
  "license": "MIT",
  "gitHead": "2bdda84272650aedfb45d8abe11a6d177933a803",
  "bugs": {
    "url": "https://github.com/necolas/normalize.css/issues"
  },
  "_id": "normalize.css@3.0.3",
  "scripts": {},
  "_shasum": "acc00262e235a2caa91363a2e5e3bfa4f8ad05c6",
  "_from": "normalize.css@3.0.3",
  "_npmVersion": "2.7.0",
  "_nodeVersion": "0.10.35",
  "_npmUser": {
    "name": "necolas",
    "email": "nicolasgallagher@gmail.com"
  },
  "maintainers": [
    {
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
    },
    {
      "name": "necolas",
      "email": "nicolasgallagher@gmail.com"
    }
  ],
  "dist": {
    "shasum": "acc00262e235a2caa91363a2e5e3bfa4f8ad05c6",
    "tarball": "https://registry.npmjs.org/normalize.css/-/normalize.css-3.0.3.tgz"
  },
  "directories": {},
  "_resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-3.0.3.tgz",
  "readme": "ERROR: No README data found!"
}

二、package.json屬性說明

    name - 包名.
    version - 包的版本號。
    description - 包的描述。
    homepage - 包的官網URL。
    author - 包的做者,它的值是你在https://npmjs.org網站的有效帳戶名,遵循「帳戶名<郵件>」的規則,例如:zhangsan <zhangsan@163.com>
    contributors - 包的其餘貢獻者。
    dependencies / devDependencies - 生產/開發環境依賴包列表。它們將會被安裝在 node_module 目錄下。
    repository - 包代碼的Repo信息,包括type和URL,type能夠是git或svn,URL則是包的Repo地址。
    main - main 字段指定了程序的主入口文件,require('moduleName') 就會加載這個文件。這個字段的默認值是模塊根目錄下面的 index.js。
    keywords - 關鍵字css

       上述參數是極爲常見的參數,另外還能夠設置scriptlicense等等。除了官方必須的一些參數外,咱們也能夠存儲咱們本身的關於模塊的描述信息在package.json。html

三、生成package.json文件

       咱們可使用NPM生成package.json文件,它能夠包含最基本的設置以及結果。java

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node_modules) runoob                   # 模塊名
version: (1.0.0) 
description: Node.js 測試模塊(www.runoob.com)  # 描述
entry point: (index.js) 
test command: make test
git repository: https://github.com/runoob/runoob.git  # Github 地址
keywords: 
author: 
license: (ISC) 
About to write to ……/node_modules/package.json:      # 生成地址

{
  "name": "runoob",
  "version": "1.0.0",
  "description": "Node.js 測試模塊(www.runoob.com)",
  ……
}

Is this ok? (yes) yes

       這樣就生成了一個最基本的package.json文件,注意手動更改的時候要徹底遵循嚴格的JSON書寫格式,不然容易出現意想不到的簡單錯誤。node

四、關於版本號的描述

       npm模塊的完整的版本號通常是【主版本 . 次要版本 . 補丁版本】,通常狀況下,次要版本號發生改變的話,表示程序有重大更新。git

(1)使用~表示版本範圍github

         這裏大概能夠如此概述:① 補丁版本號缺失,則容許補丁版本號升級;② 次要版本號+補丁版本號缺失,則容許次要版本號+補丁版本號升級。npm

標識示例 描述 版本範圍 說明
~2.3.4 主版本+次要版本+補丁版本 2.3.4 <= version < 2.4.0 在主版本+次要版本不容許變動的前提下,容許補丁版本升級(補丁闆闆號下限是4,無上限)。
~2.3 主版本+次要版本 2.3.0 <= version < 2.4.0 在主版本+次要版本不容許變動的前提下,容許補丁版本升級。
~2 主版本 2.0.0 <= version < 3.0.0 在主版本不容許變動的前提下,容許次要版本+補丁版本升級。

(2)使用^表示版本範圍json

         這裏大概能夠如此概述:
         ① 若主版本號不爲0,則容許次要版本號+補丁版本號升級;② 若主版本號爲0,次要版本號不爲0,則容許補丁版本號升級;③ 若主版本號+次要版本號皆爲0,將沒法升級模塊;④ 若主版本不爲0,補丁版本缺失(將被視做0),那麼將容許次要版本+補丁版本升級到到最新;⑤ 若主版本爲0,補丁版本缺失(將被視做0),那麼容許補丁版本升級到最新;⑥ 若次要版本+補丁版本均缺失,此時補丁版本,被視做1,那麼將容許次要版本+補丁版本升級到最新。架構

標識示例 描述 版本範圍 說明
^1.3.4 主版本號不爲0 1.3.4 <= version < 2.0.0 主版本不爲0,容許次要版本+補丁版本升級(此例下限是1.3.4,上線是2.0.0但不匹配2.0.0)
^0.2.3 主版本號爲0,次要版本號不爲0 0.2.3 <= version < 0.3.0 主版本爲0,次要版本不爲0,容許補丁版本升級(此例下限是0.2.3,上限是0.3.0但不匹配0.3.0)
^0.0.3 主版本號+次要版本號均爲0 0.0.3 <= version < 0.0.4 主版本號+次要版本號均爲0,沒法升級模塊
^1.3 主版本不爲0,補丁版本缺失 1.3.0 <= version < 2.0.0 主版本不爲0,補丁版本因缺失被視做0,容許次要版本+補丁版本升級到到最新(此例下限是1.3.0,上線是2.0.0但不匹配2.0.0)
^0.2 主版本爲0,補丁版本缺失 0.2.0 <= version < 0.3.0 主版本爲0,補丁版本因缺失被視做0,容許補丁版本升級到最新(此例下限是0.2.0,上限是0.3.0但不匹配0.3.0)
^1 主版本號不爲0,次要版本+補丁版本均缺失 1.0.0 <= version < 2.0.0 主版本不爲0,次要版本+補丁版本因缺失被視做0,容許次要版本+補丁版本升級(此例下限是1.0.0,上線是2.0.0但不匹配2.0.0)
^0 主版本號爲0,次要版本+補丁版本均缺失 0.0.1 <= version < 1.0.0 主版本爲0,次要版本因缺失被視做0,補丁版本雖缺失但只能被視做1,容許缺失的次要版本+補丁版本升級到最新(此例下限是0.0.1,上限是1.0.0但不匹配1.0.0)

(3)語義版本號

         使用NPM下載和發佈代碼時都會接觸到版本號。NPM使用語義版本號來管理代碼,這裏簡單介紹一下。

         語義版本號分爲X.Y.Z三位,分別表明主版本號、次版本號和補丁版本號。當代碼變動時,版本號按如下原則更新。

  1. 若是隻是修復bug,須要更新Z位。
  2. 若是是新增了功能,可是向下兼容,須要更新Y位。
  3. 若是有大變更,向下不兼容,須要更新X位。
{
    "dependencies": {
        "foo": "1.0.0 - 2.9999.9999",   
        "bar": ">=1.0.2 <2.1.2",        必須大於等於1.0.2版本且小於2.1.2版本
        "baz": ">1.0.2 <=2.3.4",        必須大於1.0.2版本且小於等於2.3.4版本
        "boo": "2.3.1",                 必須匹配這個版本
        "boo": "~2.3.1",                約等於2.3.1,只更新最小版本,至關於2.3.X,即>=2.3.1 <2.4.0
        "thr": "2.3.x",
        "boo": "^2.3.1",                與2.3.1版本兼容,至關於2.X.X, 即>=2.3.1 < 3.0.0,不改變大版本號。
        "qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
        "asd": "http://asdf.com/asdf.tar.gz",   在版本上指定一個壓縮包的url,當執行npm install 時這個壓縮包會被下載並安裝到本地。
        "til": "~1.2",   
        "elf": "~1.2.3", 
        "two": "2.x",
        "lat": "latest",             安裝最新版本
        "dyl": "file:../dyl",         使用本地路徑
        "adf": "git://github.com/user/project.git#commit-ish"    使用git URL加commit-ish
    }
}

        

版本號有了這個保證後,在申明第三方包依賴時,除了可依賴於一個固定版本號外,還可依賴於某個範圍的版本號。例如"argv": "0.0.x"表示依賴於0.0.x系列的最新版argv。

五、本文參考

 

相關文章
相關標籤/搜索