npm package.json
npm 所管理的項目,都必須有一個package.json 文件,該文件要求是嚴格的json格式,其中name和version欄位是必須欄位,其他都是非必須欄位。
- name
必須欄位,要求與項目名稱一致,不允許空格和大寫,要求小寫字母,可以有短橫線和下劃線,但不能以橫線或者下劃線開頭;當你的項目作為一個包發布後,其他項目引入的時候,引用名稱便是該name。
- version
必須欄位,固定三級格式 a.b.c ,
當有小的改動,例如修復bug等,修改c; 例如 1.0.0 —— 1.0.1;
當新增特性,並且不會影響現有特性的時候,修改b; 例如 1.0.0 —— 1.2.0;
當新增功能,不能向下兼容的時候,修改a; 例如 1.0.0 —— 2.0.0;
- main
程序的入口文件,當你的項目作為一個包發布後,其他項目使用require方式引入的時候,默認引用該文件;
- module
等同於jsnext:main,使用ES6語法引入一個項目的時候,入口文件是module指向的文件;
module並非npm官方的(目前還不是),目前webpack2以及rollup都在使用。當使用require方式引用模塊時候,不支持ES6,因此也無法使用ES6的一些新的特性,因此該欄位專為ES6而生。所以,如果你的項目使用ES6開發,那麼在發布的時候,也可以提供兩種版本;
另外,當使用ES6語法引用項目的時候,如果沒有module,那麼默認從main獲取;
- scripts
scripts是一個對象,key表示使用npm run命令執行的名稱,value表示要執行的命令,例如
{ ... "scripts":{ "dev":"node build/build.js" }}
執行
npm run dev
等價於執行
node build/build.js
語句可以嵌套,例如
{ ... "scripts":{ "dev":"node build/build.js", "build": "npm run dev" }}
那麼執行
npm run build
與上面的執行結果相同。
因此可以將需要執行的命令寫在scripts中,方便使用。
另外,scripts中的命令,可以使用&或者&&連接多條命令,從而同時執行多條命令,例如
{ ... "scripts":{ "dev":"eslint index.js & karma start config.js", "dev":"eslint index.js && karma start config.js", }}
&表示被連接的命令並行執行,&& 表示逐條執行。在這裡需要注意的是,啟動node服務的命令不能與其他命令使用&&連接,因為node服務會監聽某個埠,被認為命令沒有執行完,那麼他後面的命令便無法執行。因此針對啟動node服務命令有以下解決方案:
方案一:
{ ... "scripts":{ "devdev": "node server/server.js & node server/server2.js" }}
優點:並行執行,兩條命令都執行;
缺點:難以查看日誌,沒有拌飯確認輸出來自於哪一條命令;
方案二:
"dev:server1": "node server/server.js &","dev:server2": "node server/server2.js &","dev": " npm run dev:server1 && npm run dev:server2"
優點:兩條命令逐條執行,互不干擾;
缺點:無法在終端查看日誌,無法在終端直接 ctrl+c 終止命令,需要kill進程;
方案三:
插件 concurrently
"dev1": "node server/server.js","dev2": "node server/server2.js","dev3": "concurrently " npm run dev1 " "npm run dev2""
效果類似於方案一。
所以,最好的方式是將啟動終端的服務單獨寫一條命令,不要與其他的同時執行。
- description
項目描述;
- repository
代碼地址,例如
"repository": { "type": "git", "url": "git+https://github.com/vuejs/vue.git" }
- keywords
數組類型,關鍵詞,用於在npm檢索,便於被搜索到,例如
"keywords":["vue"]
- bugs
bug鏈接或者郵箱,當用戶遇到問題後,方便與開發者聯繫,例如:
{ "url" : "https://github.com/owner/project/issues", "email" : "project@hostname.com"}
- homepage
項目主頁鏈接
- dependencies
項目運行依賴的包,例如:
"dependencies": { "babel-core": "^6.24.1", "babel-eslint": "^8.0.1"}
其中,版本號有以下幾種寫法,分別表示的意義是:
a) version //必須是該版本
b) >version //必須比該版本號大
c) >=version //不能小於該版本
d) <version //小於該版本
e) <=version //不大於該版本
f) ~version //近似等於該版本
g) ^version //兼容該版本
h) 1.2.x // 1.2.0, 1.2.1, etc.
i) http://...
j) * //任意版本
k) "" //任意版本
l) version1 - version2 // >=version1 <=version2.
m) range1 || range2 //range1或者range2
n) git...
o) user/repo
p) tag
q) path/path/path
執行命令
npm install <name> --save
將會在本地安裝,並且寫入到dependencies.
- devDependencies
項目開發時依賴的包
執行命令
npm install <name> --save-dev
將會在本地安裝,並且寫入到devDependencies.
- bin
在路徑中安裝可執行文件,類似於配置全局變數;例如
"bin": { "karma": "./bin/karma"},
這樣設置後,局部安裝karma的時候,會在node_modules/.bin 目錄下創建鏈接
- files
數組類型;如果沒有該欄位,那麼在發布的時候,將會發布項目中除了自動過濾的文件之外的所有文件;如果該欄位添加了一些文件,那麼被添加的文件及自文件都會被添加到發布的項目中;可以使用.npmignore,描述不需要發布的信息,如果沒有.npmignore,可以使用.gitignore代替。
- author
作者,例如
{ "author":{ "name":"", "email":"" } }
- license
證書,關於證書說明,詳見Software Package Data Exchange (SPDX)
- contributors
貢獻者,例如
{ "contributors":[ { "name":"", "email":"" } ]}
- engines
支持的node版本
- config
設置一些參數,便於腳本執行時候讀取,例如:
{ "config" : { "port" : "8080" } }
那麼在腳本文件中, process.env.npm_package_config_port 可以讀取設置的參數。
其中,process對象是 Node 的一個全局對象,提供當前 Node 進程的信息。它可以在腳本的任意位置使用,不必通過require命令載入。process.dev返回一個對象,成員為當前Shell的環境變數,參看process 對象 。
參考鏈接:
https://docs.npmjs.com/files/package.json
http://javascript.ruanyifeng.com/nodejs/process.html
https://github.com/rollup/rollup/wiki/pkg.module
推薦閱讀:
※Sinopia | 從零開始搭建npm倉庫
※node-gyp安裝編譯依賴環境
※Node快閃:npm模塊版本策略
※IoT開發的利器,pi-sync
TAG:npm |