1.概述
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,将package.json中的模块安装到node-modules文件夹下,也就是配置项目所需的运行和开发环境。
生成package.json文件
package.json文件可以手工编写,也可以使用npm init命令自动生成。这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。注:如果你一路按回车确认感觉有些麻烦,你可以直接加一个-y参数,这样npm就直接给我们生成了,即npm init -y
。有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。
如果一个模块不在package.json文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件之中。
$ npm install express --save
$ npm install express --save-dev
package.json里面不能有注释,有会报错
2.name
package.json中最重要的属性是name和version两个属性,这两个属性是必须要有的,否则模块就无法install,这两个属性一起形成了一个npm模块的唯一标识符。模块中内容变更的同时,模块版本也应该一起变化。
name属性就是你的模块名称
3.version
项目版本
4.description
一个描述,方便别人了解你的模块作用,搜索(npm search)的时候也有用,格式为字符串。
5.keywords
关键字。方便使用者在 npm search中搜索。格式为字符串。
6.scripts字段
npm 允许在package.json文件里面,使用scripts字段定义脚本命令。
{
// ...
"scripts": {
"build": "node build.js",
"preinstall": "echo here it comes!"
}
}
上面代码build命令对应的脚本是node build.js。
命令行下使用npm run命令,就可以执行这段脚本。
$ npm run build
# 等同于执行
$ node build.js
这些定义在package.json的命令(scripts)就称为 npm 脚本。它的优点很多。
1.npm 提供的很多辅助功能。
2.用户不需要知道怎么测试你的项目,只要运行npm run test即可。
查看当前项目的所有 npm 脚本命令,可以使用的npm run命令。
$ npm run
7.dependencies字段
dependencies字段指定了项目运行所依赖的模块,格式为对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。
"deependencies": {
"browserify": "~13.0.0",
"karma-browserify": "~5.0.1"
}
版本格式如下:
1.指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
2.波浪号(~)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
3.插入号(^)+指定版本:比如^1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
4.latest:安装最新版本。
默认在版本发布上,一个版本有三部分:X, Y, Z,分别指代大版本,小版本,与查缺补漏版本。比如1.2.3,那么就是大版本1,小版本2,bugfix版本3。bugfix版本不会影响任何功能,小版本变更往往是增加新功能,也不会影响使用。而大版本变更往往会带来使用层面不兼容的情况。
8.devDependencies字段
devDependencies指定项目开发所需要的模块,格式为对象。该对象的各个成员和dependencies字段的相同。
9.安装dependencies字段和dependencies字段
package.json文件可以手工编写,也可以使用npm init命令自动生成。
$ npm init
这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。
有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。
$ npm install
如果一个模块不在package.json文件之中,可以使用相应的参数,单独安装这个模块,安装后会自动写入package.json文件之中。
--save参数表示将该模块写入dependencies属性,--save-dev表示将该模块写入devDependencies属性。
$ npm install express --save
$ npm install express --save-dev
上面代码表示单独安装express模块。
注意:dependencies可以叫做线上依赖,devDependencies叫做开发依赖,区别举个例子来说,使用webpack开发一个vue项目,需要依赖vue,以及一些编译过程中的需要的sass插件等,开发完打包时,vue属于线上依赖,sass插件属于开发依赖,打包时候nodejs会根据--save还是--save-dev来判断,线上依赖会一起打包到项目里面,开发依赖不会打包。
10.engines 字段
指明了该项目所需要的node.js版本。也可以指定适用的npm版本
"engines": {
"node": ">= 4.0.0",
"npm": ">= 3.0.0"
},
11.Repository字段
用于指示源代码存放的位置
"repository" :{
"type" : "git",
"url" : "http://github.com/npm/npm.git"
}
"repository" :{
"type" : "svn",
"url" : "http://v8.googlecode.com/svn/trunk/"
}
12.browserslist
众所周知为兼容所有浏览器,有的CSS属性需要对不同的浏览器加上前缀。
Autoprefixer使用Browserlist来确定哪些浏览器版本将得到支持从而添加前缀。格式为数组。
"browserslist": [
"> 1%", //全球有超过1%的人使用的浏览器
"last 2 versions", //根据CanIUse.com追踪的最后两个版本的所有浏览器
"not ie <= 8" // 不支持ie8及以下
]
13.private
设为true这个包将不会发布到NPM平台下。