概述
每個項目的根目錄下面锋勺,一般都有一個package.json
文件噪叙,定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數(shù)據(jù))告匠。npm install
命令根據(jù)這個配置文件,自動下載所需的模塊离唬,也就是配置項目所需的運行和開發(fā)環(huán)境凫海。
下面是一個最簡單的package.json文件,只定義兩項元數(shù)據(jù):項目名稱和項目版本男娄。
{
"name" : "xxx",
"version" : "0.0.0",
}
上面代碼說明,package.json文件內(nèi)部就是一個JSON對象,該對象的每一個成員就是當(dāng)前項目的一項設(shè)置模闲。比如name就是項目名稱建瘫,version是版本(遵守“大版本.次要版本.小版本”的格式)。
下面是一個更完整的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": {
"start": "node index.js"
},
"dependencies": {
"express": "latest",
"mongoose": "~3.8.3",
"handlebars-runtime": "~1.0.12",
"express3-handlebars": "~0.5.0",
"MD5": "~1.2.0"
},
"devDependencies": {
"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文件的各個字段啰脚。
package.json屬性說明
name - 包名.
version - 包的版本號。
description - 包的描述实夹。
homepage - 包的官網(wǎng)URL橄浓。
author - 包的作者,它的值是你在https://npmjs.org網(wǎng)站的有效賬戶名亮航,遵循“賬戶名<郵件>
”的規(guī)則荸实,例如:zhangsan <zhangsan@163.com>
。
contributors - 包的其他貢獻者缴淋。
dependencies / devDependencies - 生產(chǎn)/開發(fā)環(huán)境依賴包列表准给。它們將會被安裝在 node_module 目錄下。
repository - 包代碼的Repo信息重抖,包括type和URL露氮,type可以是git或svn,URL則是包的Repo地址钟沛。
main - main 字段指定了程序的主入口文件畔规,require('moduleName') 就會加載這個文件。這個字段的默認(rèn)值是模塊根目錄下面的 index.js恨统。
keywords - 關(guān)鍵字
上述參數(shù)是極為常見的參數(shù)叁扫,另外還可以設(shè)置script
、license
等等延欠。除了官方必須的一些參數(shù)外陌兑,我們也可以存儲我們自己的關(guān)于模塊的描述信息在package.json。
-
scripts字段
scripts指定了運行腳本命令的npm命令行縮寫
由捎,比如start指定了運行npm run start時兔综,所要執(zhí)行的命令。
下面的設(shè)置指定了npm run preinstall狞玛、npm run postinstall软驰、npm run start、npm run test時心肪,所要執(zhí)行的命令锭亏。
"scripts": {
"preinstall": "echo here it comes!",
"postinstall": "echo there it goes!",
"start": "node index.js",
"test": "tap test/*.js"
}
-
dependencies字段,devDependencies字段
dependencies字段指定了項目運行所依賴的模塊硬鞍,devDependencies指定項目開發(fā)所需要的模塊慧瘤。
它們都指向一個對象戴已。該對象的各個成員,分別由模塊名和對應(yīng)的版本要求組成锅减,表示依賴的模塊及其版本范圍糖儡。
{
"devDependencies": {
"browserify": "~13.0.0",
"karma-browserify": "~5.0.1"
}
}
-
main字段
main字段指定了加載的入口文件,require('moduleName')就會加載這個文件怔匣。這個字段的默認(rèn)值是模塊根目錄下面的index.js
握联。 -
config字段
config字段用于向環(huán)境變量輸出值。
下面是一個package.json文件每瞒。
{
"name" : "foo",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node server.js" }
}
然后金闽,在server.js腳本就可以引用config字段的值。
http.createServer(...).listen(process.env.npm_package_config_port)
用戶可以改變這個值剿骨。
$ npm config set foo:port 80
生成package.json文件
使用NPM生成package.json文件代芜,它可以包含最基本的設(shè)置以及結(jié)果。
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (packjson) demo //項目名字
version: (1.0.0) //版本號
description: hello world //項目描述
entry point: (index.js) //項目入口
test command: //
git repository: //github倉庫
keywords: //npm安裝時的關(guān)鍵字
author: 張三 //作者
license: (ISC) //協(xié)議
About to write to E:\good good study\NodeJs\packjson\package.json:
{
"name": "demo",
"version": "1.0.0",
"description": "hello world",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "張三",
"license": "ISC"
}
Is this OK? (yes) yes
這樣就生成了一個最基本的package.json文件懦砂,注意手動更改的時候要完全遵循嚴(yán)格的JSON書寫格式蜒犯,否則容易出現(xiàn)意想不到的簡單錯誤。
- package.json文件
{
"name": "demo",
"version": "1.0.0",
"description": "hello world",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "張三",
"license": "ISC"
}
有了package.json文件荞膘,直接使用npm install命令衔沼,就會在當(dāng)前目錄中安裝所需要的模塊弄息。
$ npm install
如果一個模塊不在package.json文件之中椰于,可以單獨安裝這個模塊梭姓,并使用相應(yīng)的參數(shù),將其寫入package.json文件之中屠升。
$ npm install express --save
$ npm install express --save-dev
上面代碼表示單獨安裝express模塊潮改,--save參數(shù)表示將該模塊寫入dependencies屬性,--save-dev表示將該模塊寫入devDependencies屬性腹暖。