package.json
該文件定義了項目所需的各種模塊,以及配置信息(名稱,版本,許可證等元數據)
npm install 會根據這個配置文件自動下載所需要的模塊
最簡單的package.json
只包含:項目名稱和項目版本
{
"name" : "xxx", # 項目名稱
"version" : "0.0.0", # 項目版本:大版本.次要版本.小版本
}
package.json文件就是一個JSON對象,該對象的每一個成員就是當前項目的一項設置
常見的詳細package.json
{
"name": "Hello World",
"version": "0.0.1",
"author": "張三",
"description": "第一個node.js程序",
"keywords":["node.js","javascript"],
"repository": {
"type": "git",
"url": "https://path/to/url"
},
"license":"MIT",
"engines": {"node": "0.10.x"},
"bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
"contributors":[{"name":"李四","email":"lisi@example.com"}],
"scripts": {
# npm 命令行縮寫,運行npm run start時,執行這個bash
"start": "node index.js"
},
"dependencies": { # 項目依賴,安裝模塊時如果輸入--save就會存在這里
"express": "latest", # 安裝最新版本
"mongoose": "~3.8.3", # 安裝3.8.x的最新版本,不低於3.8.3(不改變大版本號和次要版本號)
"mongoose": "^3.8.3", # 安裝3.x.x的最新版本,不低於3.8.3(不改變大版本號)
"handlebars-runtime": "~1.0.12",
"express3-handlebars": "~0.5.0",
"MD5": "~1.2.0"
},
"devDependencies": { # 開發依賴,安裝模塊時如果輸入--save-dev就會存在這里
"bower": "~1.2.8",
"grunt": "~0.4.1",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.7.2",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-clean": "~0.5.0",
"browserify": "2.36.1",
"grunt-browserify": "~1.3.0",
}
}
常用命令
# package.json文件可以手工編寫,也可以使用npm init命令自動生成
# 經過互動方式輸入項目名稱和版本等資料,進行自動生成
npm init
# 有了package.json文件后直接使用npm install就會安裝所需要的模塊
npm install
# 如果模塊不在package.json文件中,可以單獨安裝這個模塊
npm install express --save # 寫入項目依賴dependencies
npm install express --save-dev # 寫入項目開發依賴devDependencies
peerDependencies
{
#安裝chai-as-promised模塊時,主程序chai必須一起安裝,而且chai的版本必須是1.x。如果你的項目指定的依賴是chai的2.0版本,就會報錯
"name": "chai-as-promised",
"peerDependencies": {
"chai": "1.x"
}
}
bin字段
"bin": {
"someTool": "./bin/someTool.js"
}
# 指定,someTool 命令對應的可執行文件為 bin 子目錄下的 someTool.js。Npm會尋找這個文件,在node_modules/.bin/目錄下建立符號鏈接。
# 在上面的例子中,someTool.js會建立符號鏈接node_modules/.bin/someTool。
# 由於node_modules/.bin/目錄會在運行時加入系統的PATH變量,因此在運行npm時,就可以不帶路徑,直接通過命令來調用這些腳本
因此,像下面這樣的寫法可以采用簡寫
"scripts": {
"start": './node_modules/bin/someTool.js build'
}
// 簡寫為
"scripts": {
"start": 'someTool build'
}
所有node_modules/.bin/
目錄下的命令,都可以用npm run [命令]
的格式運行。在命令行下,鍵入npm run
,然后按tab鍵,就會顯示所有可以使用的命令
main字段
main字段指定了加載的入口文件,require('moduleName') 就會加載這個文件
這個字段的默認值是模塊根目錄下面的index.js
config字段
用於添加命令行的環境變量
# package.json
{
"name" : "foo",
"config" : { "port" : "8080" }, # 添加環境變量
"scripts" : { "start" : "node server.js" }
}
# server.js
http
.createServer(...)
.listen(process.env.npm_package_config_port) # 引用config的值
npm run start # 這時可以得到設定的環境變量
npm config set foo:port 80 # 用戶可以改變這個值
其他字段
# browser 指定該模板供瀏覽器使用的版本
# Browserify這樣的瀏覽器打包工具,通過它就知道該打包那個文件(?)
"browser": {
"tipso": "./node_modules/tipso/src/tipso.js"
},
# engines 指明該模塊運行的平台,如Node版本或者瀏覽器
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
{ "engines" : { "npm" : "~1.0.20" } }
# man 指定當前模塊的man文檔的位置
# ("man" 是英文單詞manual的縮寫,中文意為手冊、幫助文檔)
"man" :[ "./doc/calc.1" ]
# style 指定供瀏覽器使用時,樣式文件所在位置
"style": [
"./node_modules/tipso/src/tipso.css"
]