概述
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
管理本地安装npm包的最好方式是创建package.json文件。
使用 npm init 即可在当前目录创建一个 package.json 文件
npm init 初始化的package.json内容
* 真实的package.json没有注释(json文件不存在注释)
{
"name": "package",//项目名称
"version": "1.0.0",//项目版本
"description": "",//项目描述
"main": "index.js",//主文件(比如默认是index.js,项目名称叫package。那么require(‘package’)将返回index.js返回的内容)
"scripts": {//指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",//作者
"license": "ISC"//协议
}
一个更完整的package.json
{
"name": "my-weex-demo",
"version": "1.0.0",
"description": "a weex project",
"main": "index.js",
"scripts": {//scripts指定了运行脚本命令的npm命令行缩写
"build": "weex-builder src dist",
"build_plugin": "webpack --config ./tools/webpack.config.plugin.js --color",
"dev": "weex-builder src dist -w",
"serve": "serve -p 8080"
},
"keywords": [
"weex"
],
"author": "fkysly@gmail.com",
"license": "MIT",
"devDependencies": {//devDependencies指定项目开发所需要的模块。
"babel-core": "^6.14.0",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.18.0",
"vue-loader": "^10.0.2",
"eslint": "^3.5.0",
"serve": "^1.4.0",
"webpack": "^1.13.2",
"weex-loader": "^0.3.3",
"weex-builder": "^0.2.6"
},
"dependencies": {//dependencies字段指定了项目运行所依赖的模块
"weex-html5": "^0.3.2",
"weex-components": "*"
}
}
详细解释package.json文件的各个字段。
- scripts字段
- scripts指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
- 下面的设置指定了npm run preinstall、npm run postinstall、npm run start、npm run test时,所要执行的命令。
"scripts": {
"preinstall": "echo here it comes!",
"postinstall": "echo there it goes!",
"start": "node index.js",
"test": "tap test/*.js"
}
- dependencies字段,devDependencies字段
- dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。
它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。
{
"devDependencies": {
"browserify": "^13.0.0",//表示安装13.x.x的最新版本(不低于13.0.0),但是不安装14.x.x,也就是说安装时不改变大版本号。
"karma-browserify": "~5.0.1,"//表示安装5.0.x的最新版本(不低于5.0.1),但是不安装5.1.x,也就是说安装时不改变大版本号和次要版本号
"express": "latest",//最新版本号
"MD5": "1.2.0"//正常版本号
}
}
- 如果一个模块不在package.json文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件之中(手动添加)。
npm install安装模块
- npm install 本地安装
(1)将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
(2)可以通过 require() 来引入本地安装的包。
- npm install -g全局安装
(1)将安装包放在你 node 的安装目录。
(2)可以直接在命令行里使用。
(3)不能使用 package.json 里列举的依赖进行全局安装
- npm install --save 在生产环境中需要用到的依赖 ,发布之后还依赖的东西
(1)会把msbuild包安装到node_modules目录中
(2)会在package.json的dependencies属性下添加msbuild
(3)之后运行npm install命令时,会自动安装msbuild到node_modules目录中
(4)之后运行npm install --production或者注明NODE_ENV变量值为production时,会自动安装msbuild到node_modules目录中
- npm install --save-dev 在开发、测试环境中用到的依赖 ,开发时依赖的东西
(1)会把msbuild包安装到node_modules目录中
(2)会在package.json的devDependencies属性下添加msbuild
(3)之后运行npm install命令时,会自动安装msbuild到node_modules目录中
(4)之后运行npm install --production或者注明NODE_ENV变量值为production时,不会自动安装msbuild到node_modules目录中
package更新文件
npm 包提供者应该注意的版本号规范
- 补丁版本:解决了 Bug 或者一些较小的更改,增加最后一位数字,比如 1.0.1
- 小版本:增加了新特性,同时不会影响之前的版本,增加中间一位数字,比如 1.1.0
- 大版本:大改版,无法兼容之前的,增加第一位数字,比如 2.0.0
npm 包使用者就可以针对自己的需要填写依赖包的版本规则
- 如果只打算接受补丁版本的更新(也就是最后一位的改变),就可以这么写:
- 1.0
- 1.0.x
- ~1.0.4
- 如果接受小版本的更新(第二位的改变),就可以这么写:
- 1
- 1.x
- ^1.0.4
- 如果可以接受大版本的更新(自然接受小版本和补丁版本的改变),就可以这么写:
- *
- x
使用 npm update <package-name> 更新它,或者直接 npm update 更新所有:
有时候因为版本限制不能更新到最新的包,需要改写一下package依赖包的版本限制
"dependencies": {//版本限制在 : 接受小版本的更新(第二位的改变)
"lodash": "^3.1.0"
}
"dependencies": {//package依赖包的版本 更新后
"lodash": "^3.10.1"
}
"dependencies": {//表示任何版本的更新都接受
"lodash": "*"
}
运行命令 npm run
package.json 中的 scripts 执行的脚本是本地项目内 node_modules -> .bin 内的脚本。
- npm 可以直接运行 package.json 中 scripts 指定的脚本:
"scripts": {
"build": "weex-builder src dist",
"build_plugin": "webpack --config ./tools/webpack.config.plugin.js --color",
"dev": "weex-builder src dist -w",
"serve": "serve -p 8080"
}
npm run build就会执行"weex-builder src dist"命令