標籤:

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) ...

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 對象 。

參考鏈接:

docs.npmjs.com/files/pa

javascript.ruanyifeng.com

github.com/rollup/rollu

推薦閱讀:

Sinopia | 從零開始搭建npm倉庫
node-gyp安裝編譯依賴環境
Node快閃:npm模塊版本策略
IoT開發的利器,pi-sync

TAG:npm |