創(chuàng)建package.json是用來(lái)管理本地包的最好的方法。
一個(gè)package.json文件可以提供很多有用的事情:
1.它描述了你的項(xiàng)目依賴一些包
2.它指定了包的版本范圍
3.它使你的項(xiàng)目分享給其他開(kāi)發(fā)者更容易
要求
最小限度的要求:
-
"name"
- 全部小寫
- 一個(gè)單詞,不能有空格
- 允許破折號(hào)和下劃線
-
"version"
- 以x.x.x的格式
- 遵循semver spec
例子
{
"name": "my-awesome-package",
"version": "1.0.0"
}
創(chuàng)建一個(gè)package.json
npm init
這將根據(jù)你的輸入在當(dāng)前目錄創(chuàng)建一個(gè)package.json文件。
標(biāo)識(shí)--yes
npm init --yes
這將根據(jù)默認(rèn)模板快速創(chuàng)建一個(gè)package.json文件。
這將寫到當(dāng)前目錄的package.json
{
"name": "my_package",
"description": "",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"repository": {
"type": "git",
"url": "https://github.com/ashleygwilliams/my_package.git"
},
"bugs": {
"url": "https://github.com/ashleygwilliams/my_package/issues"
},
"homepage": "https://github.com/ashleygwilliams/my_package"
}
- name:默認(rèn)是作者名,如果在git目錄則是目錄名。
- description:空
- version:1.0.0
- main:index.js
- scripts:創(chuàng)建一個(gè)空的測(cè)試腳本
- keywords:空的
- author:空的
- license:ISC
- respository:和當(dāng)前所在目錄有關(guān)
- bugs:和當(dāng)前所在目錄有關(guān)
- home:和當(dāng)前所在目錄有關(guān)
你可以通過(guò)以下命令配置一些默認(rèn)信息
npm set init.author.email "wombat@npmjs.com"
npm set init.author.name "ag_dubs"
npm set init.license "MIT"
note:
如果package.json中沒(méi)有description字段,NPM使用readme.md的第一行或readme作為description。description有助于人們找到你的NPM包;一個(gè)自定義的描述可以讓你的包更容易被發(fā)現(xiàn)。
定制init
同樣你可以自己定制一些初始化信息,在初始化的時(shí)候這些信息會(huì)自動(dòng)放到package.json中。你需要把額外的初始化信息放到 .npm-init.js
中,這個(gè)文件需要在根目錄中創(chuàng)建。
如果是windows系統(tǒng),則放在如下目錄
X:\Users\用戶名\.npm-init.js
例子,如果你的.npm-init.js內(nèi)容像下面一樣:
module.exports = {
customField: 'Custom Field',
otherCustomField: 'This field is really cool'
}
當(dāng)執(zhí)行 npm init
命令時(shí),會(huì)在當(dāng)前目錄生成一個(gè)package.json文件,內(nèi)容如下:
{
customField: 'Custom Field',
otherCustomField: 'This field is really cool'
}
Customizing the questions is also possible, by using the prompt function.
module.exports = prompt("what's your favorite flavor of ice cream buddy?", "I LIKE THEM ALL");
如果想要學(xué)習(xí)更高級(jí)的自定義,可以查看
init-package-json
指定依賴包
你需要在 package.json 中聲明你的項(xiàng)目需要依賴的包。這里有兩種依賴類型的聲明:
- "dependencies":生成的產(chǎn)品中需要依賴的包
- "devDependencies":僅在開(kāi)發(fā)和測(cè)試中需要用到的包。
手動(dòng)編輯package.json
你可以手動(dòng)編輯package.json。你需要?jiǎng)?chuàng)建dependencies屬性去為你的項(xiàng)目添加依賴,這個(gè)屬性將描述你所用到的包以及所用包的版本,使用 semver表達(dá)式來(lái)聲明哪些版本的包是兼容你的項(xiàng)目的。
如果你僅僅只需要在開(kāi)發(fā)中使用這些包,你可以按照上述相同配置在devDependencies屬性中。
例如:你的項(xiàng)目使用 my_dep 的版本1作為生產(chǎn)依賴,使用 my_test_framework 作為開(kāi)發(fā)時(shí)的依賴。你可以如下配置:
{
"name": "my_package",
"version": "1.0.0",
"dependencies": {
"my_dep": "^1.0.0"
},
"devDependencies" : {
"my_test_framework": "^3.1.0"
}
}
--save 和 --save-dev
使用命令為你的項(xiàng)目添加依賴是更簡(jiǎn)單方便的。你可以使用 npm install
命令下載包到本地。運(yùn)用標(biāo)志位可以自動(dòng)添加依賴項(xiàng)到package.json文件中。
添加到package.json的dependencies:
npm install <package_name> --save
添加到package.json的devDependencies:
npm install <package_name> --save-dev
管理依賴版本
npm使用Semantic Versioning(我們通常簡(jiǎn)稱為SemVer)來(lái)管理包的版本范圍。
如果當(dāng)前目錄存在package.json文件,使用npm install
命令,npm將會(huì)根據(jù) semver rules 下載最新的依賴包。
你可以通過(guò) Getting Started "Semver" page學(xué)習(xí)semantic versioning。