概述
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
