寫在前面
相信入門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字段全解。
哦,對了,最後祝各位大朋友和小朋友節日快樂*_^!!!