每個Nodejs項目的根目錄下麵,一般都會有一個package.json文件。該文件可以由 生成,定義了項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)。 package.json文件內部就是一個JSON對象,該對象的每一個成員就是當前項目的一項設置。 基本欄位 1. na ...
每個Nodejs項目的根目錄下麵,一般都會有一個package.json文件。該文件可以由npm init
生成,定義了項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)。
package.json文件內部就是一個JSON對象,該對象的每一個成員就是當前項目的一項設置。
基本欄位
name
項目名稱(npm包名)。必需欄位
version
項目版本。必需欄位。
版本號的格式為"1.0.0",分別代表“主版本號.次版本號.修訂號”。它的遞增規則如下:- 主版本號:當你做了不相容的API 修改;
- 次版本號:當你做了向下相容的功能性新增;
- 修訂號:當你做了向下相容的問題修正。
在實際使用中,一般可以看到各種形式的版本號:
*: 任意版本 1.1.0: 指定版本 ~1.1.0: 1.1.0 <= 版本 < 1.2.0 ^1.1.0: 1.1.0 <= 版本 < 2.0.0 latest:安裝最新版本。
*
表示任意版本;~
首碼表示,安裝大於指定的這個版本,並且匹配到 x.y.z 中 z 最新的版本;^
首碼在 ^0.y.z 時的表現和 ~0.y.z 是一樣的,然而 ^1.y.z 的時候,就會匹配到 y 和 z 都是最新的版本;- 特殊的是,當版本號為 ^0.0.z 或者 ~0.0.z 的時候,考慮到 0.0.z 是一個不穩定版本, 所以它們都相當於 =0.0.z。
author && contributors
項目作者以及貢獻者。author是字元串形式的作者名,contributors是一個項目貢獻者數組。
description && keywords
項目描述和項目關鍵字。幫助人們在使用npm search時找到這個包。
license
許可證。
功能性欄位
scripts
定義腳本命令。它的每一個屬性,對應一段腳本。並且可以在命令行下使用npm run命令執行這段腳本。
npm 腳本的原理非常簡單。每當執行npm run,就會自動新建一個 Shell,在這個 Shell 裡面執行指定的腳本命令。因此,只要是 Shell(一般是 Bash)可以運行的命令,就可以寫在 npm 腳本裡面。
比較特別的是,npm run新建的這個 Shell,會將當前目錄的node_modules/.bin子目錄加入PATH變數,執行結束後,再將PATH變數恢複原樣。
更多可參考阮老師的 npm scripts 使用指南
dependencies && devDependencies
npm install
在安裝node模塊時,有兩種命令參數可以把它們的信息寫入package.json文件:–save
以及–save-dev
。–save
會把依賴包名稱添加到package.json文件dependencies
鍵下,–save-dev
則添加到package.json文件devDependencies
鍵下。dependencies
欄位指定了項目生產環境中需要的依賴,即正常運行該包時所依賴的模塊,devDependencies
指定項目開發所需要的依賴項,像一些進行單元測試之類的包,比如grunt-contrib-uglify,我們用它混淆js文件,它們不會被部署到生產環境。它們都指向一個對象。該對象的各個成員,分別由模塊名和對應的版本要求組成,表示依賴的模塊及其版本範圍。
bin
用來指定各個內部命令對應的可執行文件的位置。
例如:
"bin": { "someTool": "./bin/someTool.js" }
上面代碼指定,someTool 命令對應的可執行文件為 bin 子目錄下的 someTool.js
main
指定包的入口程式文件。這個欄位的預設值是模塊根目錄下麵的index.js。
config
用於向環境變數輸出值。
比如:
{ // ... "config" : { "port" : "8080" }, }
然後通過
process.env.npm_package_config_port
讀取該值。
其他欄位
engines
指定node的工作版本
man
指定當前模塊的man文檔的位置。
preferGlobal
布爾類型值,表示當用戶不將該模塊安裝為全局模塊時(即不用–global參數),要不要顯示警告。
...