概述
package.json 文件是项目的清单,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称,版本,许可证等元数据)。 它可以做很多完全互不相关的事情。 例如,它是用于工具的配置中心。 它也是 npm 和 yarn 存储所有已安装软件包的名称和版本的地方。
文件结构
这是一个示例的package.json文件
{}
它是空的! 对于应用程序,package.json 文件中的内容没有固定的要求。 唯一的要求是必须遵守 JSON 格式,否则,尝试以编程的方式访问其属性的程序则无法读取它。
最简单的package.json 文件,只定义两项元数据:项目名称和项目版本
{
"name" : "xxx",
"version" : "0.0.0",
}
完整的 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",
}
}
- version 表明了当前的版本。
- name 设置了应用程序/软件包的名称。
- description 是应用程序/软件包的简短描述。
- main 设置了应用程序的入口点。
- private 如果设置为 true,则可以防止应用程序/软件包被意外地发布到 npm。
- scripts 定义了一组可以运行的 node 脚本。
- dependencies 设置了作为依赖安装的 npm 软件包的列表。
- devDependencies 设置了作为开发依赖安装的 npm 软件包的列表。
- engines 设置了此软件包/应用程序在哪个版本的 Node.js 上运行。
- browserslist 用于告知要支持哪些浏览器(及其版本)。
属性说明
main
设置软件包的入口点。
当在应用程序中导入此软件包时,应用程序会在该位置搜索模块的导出。
示例
"main": "src/main.js"
scripts
可以定义一组可以运行的node脚本
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit",
"build": "node build/build.js"
}
这些指定了运行脚本命令的npm命令行缩写。 可以通过调用 npm run XXXX 或 yarn XXXX 来运行它们,其中 XXXX 是命令的名称。 例如:npm run dev。
dependencies
设置作为依赖安装的 npm 软件包的列表
当使用 npm 或 yarn 安装软件包时:
npm install <PACKAGENAME>
yarn add <PACKAGENAME>
该软件包会被自动地插入此列表中。
示例
"dependencies": {
"vue": "^2.5.2"
}
devDependencies
设置作为开发依赖安装的 npm 软件包的列表
它们不同于 dependencies ,因为它们只需要安装在开发及其上,而无需在生产环境中运行代码
注意:—save 参数表示将该模块写入 dependencies 属性。—save-dev 则是 devDenpencies 属性
当使用 npm 或 yarn 安装软件包时:
npm install --save-dev <PACKAGENAME>
yarn add --dev <PACKAGENAME>
示例:
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1"
}
engines
设置此软件包/应用程序要运行的 Node.js 或其他命令的版本。
示例
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0",
"yarn": "^0.13.0"
}
browserslist
用于告知要支持哪些浏览器(及其版本)。 Babel、Autoprefixer 和其他工具会用到它,以将所需的 polyfill 和 fallback 添加到目标浏览器。
示例
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
此配置意味着需要支持使用率超过 1%(来自 CanIUse.com 的统计信息)的所有浏览器的最新的 2 个主版本,但不含 IE8 及更低的版本。
软件包版本
详见规则
- 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
- 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
- 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。
相关文章
https://javascript.ruanyifeng.com/nodejs/packagejson.html
http://nodejs.cn/learn/the-package-json-guide