package.json文件快速入門詳解 寫在前面 package.json是什麼 package.json配置說明 必須字段 可選字段 其它字段 寫在最後

寫在前面

相信入門nodejs或者npm的同學會對package.json這個文件有疑惑,對這個文件的作用不是很清晰,但搭建自己的博客每每用到node,npm這個文件又必不可少。

npm在package.json文件中管理項目的依賴項以及項目的元數據。
node執行js中require的時候,也會根據package.json中的依賴項查找。

package.json在npm中用的比較多,我的github博客就是基於npm管理搭建的,在項目根目錄下有package.json這個文件,如圖

package.json是什麼

每個項目的根目錄下面,一般都有一個package.json文件,定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)。npm install命令根據這個配置文件,自動下載所需的模塊,也就是配置項目所需的運行和開發環境。

下面是一個最簡單的package.json文件,只定義兩項元數據:項目名稱和項目版本。

{
  "name" : "xxx",
  "version" : "0.0.0",
}

package.json文件就是一個JSON對象,該對象的每一個成員就是當前項目的一項設置。比如name就是項目名稱,version是版本(遵守“大版本.次要版本.小版本”的格式)。

package.json配置說明

下面就以我的博客項目的package.json文件的配置作一個簡單的說明,分爲必須字段和可選字段

{
    "name": "wblearn-blog",
    "title": "Wblearn Blog",
    "author": "Wblearn <[email protected]>",
    "version": "1.7.0",
    "homepage": "https://wblearn.github.io",
    "repository": {
        "type": "git",
        "url": "https://github.com/wblearn/wblearn.github.io"
    },
    "bugs": "https://github.com/wblearn/wblearn.github.io/issues",
    "devDependencies": {
        "grunt": "~0.4.5",
        "grunt-contrib-less": "~0.11.4",
        "grunt-contrib-watch": "~0.6.1",
        "grunt-banner": "~0.2.3",
        "grunt-contrib-uglify": "~0.5.1"
    },
    "scripts": {
        "preview": "cd _site; python -m SimpleHTTPServer 8020",
        "py3view": "cd _site; python3 -m http.server 8020",
        "watch"  : "grunt watch & npm run preview & jekyll serve -w",
        "py3wa"  : "grunt watch & npm run py3view & jekyll serve -w",
        "boil"   : "git push boilerplate boilerplate:master",
        "push"   : "git push origin master --tag",
        "cafe"   : "git co gitcafe-pages; git merge master; git push gitcafe gitcafe-pages:gitcafe-pages --tag; git co master;"
    }
}

必須字段

1.Name
項目名稱

全部小寫,沒有空格,可以使用下劃線或者橫線

2.Version
項目版本號

x.x.x 的格式
符合“語義化版本規則”

可選字段

1.title
標題
2.author
author是一個人,contributors是一組人。格式設置如下:

{ “name” : “wblearn” 
, “email” : “[email protected]” 
, “url” : “[https://wblearn.github.io](https://wblearn.github.io)” 
}

也可以像我博客中的格式一樣:

"author": "Wblearn <[email protected]>",

3.homepage
項目url主頁

4.repository
用於指示代碼存放的位置。

"repository": {
        "type": "git",
        "url": "https://github.com/wblearn/wblearn.github.io"
    }
>"repository": {
        "type": "svn",
        "url": "https://github.com/wblearn/wblearn.github.io"
    }

5.bugs
問題追蹤系統的URL或郵箱地址;npm bugs用的上。比如我的

"bugs": "https://github.com/wblearn/wblearn.github.io/issues"

6.devDependencies
指定項目開發所需要的模塊,如果只需要下載使用某些模塊,而不下載這些模塊的測試和文檔框架,放在這個下面比較不錯。

"devDependencies": {
        "grunt": "~0.4.5",
        "grunt-contrib-less": "~0.11.4",
        "grunt-contrib-watch": "~0.6.1",
        "grunt-banner": "~0.2.3",
        "grunt-contrib-uglify": "~0.5.1"
    }

7.scripts
object
Key是生命週期事件名,value是在事件點要跑的命令。參考npm-scripts。
scripts指定了運行腳本命令的npm命令行縮寫,比如push指定了運行npm run push時,所要執行的命令。
下面的設置指定了npm run preview、npm run watch、npm run push、npm run cafe時,所要執行的命令。

"scripts": {
        "preview": "cd _site; python -m SimpleHTTPServer 8020",
        "py3view": "cd _site; python3 -m http.server 8020",
        "watch"  : "grunt watch & npm run preview & jekyll serve -w",
        "py3wa"  : "grunt watch & npm run py3view & jekyll serve -w",
        "boil"   : "git push boilerplate boilerplate:master",
        "push"   : "git push origin master --tag",
        "cafe"   : "git co gitcafe-pages; git merge master; git push gitcafe gitcafe-pages:gitcafe-pages --tag; git co master;"
    }

其它字段

1.Dependencies
指示當前包所依賴的其他包。

{ "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"
  }
}

版本格式可以是下面任一種:

  • ersion 完全匹配
  • >version 大於這個版本
  • >=version大於或等於這個版本
  • <version
  • <=version
  • ~version 非常接近這個版本
  • ^version 與當前版本兼容
  • 1.2.x X代表任意數字,因此1.2.1, 1.2.3等都可以
  • http://... Unix系統下使用的tarball的URL。
  • * 任何版本都可以
  • ""任何版本都可以
  • version1 - version2 等價於 >=version1 <=version2.
  • range1 || range2 滿足任意一個即可
  • git... Git地址
  • user/repo

2.License
授權方式,如果是使用一個普遍的license,比如BSD-3-Clause或MIT,直接使用:

{ "license" : "BSD-3-Clause" }

3.main
main字段指定了加載的入口文件,require('moduleName')就會加載這個文件。這個字段的默認值是模塊根目錄下面的index.js。

4.Config
object
Config對象中的值在Scripts的整個週期中皆可用,專門用於給Scripts提供配置參數。

5.Keywords
字符串數組。人們使用 npm search 搜索時發現你的項目

6.Description
必須是字符串。npm search的時候會用到。

7.Bin
bin項用來指定各個內部命令對應的可執行文件的位置。很多的包都會有執行文件需要安裝到PATH中去。
這個字段對應的是一個Map,每個元素對應一個{ 命令名:文件名 }。
{ "bin" : { "npm" : "./cli.js" } }

8.Engines
engines字段指明瞭該模塊運行的平臺,比如 Node 的某個版本或者瀏覽器
既可以指定node版本:
{ "engines" : {"node" : ">=0.10.3 <0.12" } }
也可以指定npm版本:
{ "engines" : {"npm" : "~1.0.20" } }

寫在最後

對於學習nodejs或者npm的同學,詳細瞭解package.json的一些字段不管是搭建自己的博客或者項目都有好處,當然,以上只列出package.json文件的部分主要字段,如果還想了解更多,可以參考阮一峯的package.json文件或者package.json字段全解

哦,對了,最後祝各位大朋友和小朋友節日快樂*_^!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章