概述

package.json 文件是项目的清单,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称,版本,许可证等元数据)。 它可以做很多完全互不相关的事情。 例如,它是用于工具的配置中心。 它也是 npm 和 yarn 存储所有已安装软件包的名称和版本的地方。

文件结构

这是一个示例的package.json文件

  1. {}

它是空的! 对于应用程序,package.json 文件中的内容没有固定的要求。 唯一的要求是必须遵守 JSON 格式,否则,尝试以编程的方式访问其属性的程序则无法读取它。

最简单的package.json 文件,只定义两项元数据:项目名称和项目版本

  1. {
  2. "name" : "xxx",
  3. "version" : "0.0.0",
  4. }

完整的 package.json 文件

  1. {
  2. "name": "Hello World",
  3. "version": "0.0.1",
  4. "author": "张三",
  5. "description": "第一个node.js程序",
  6. "keywords":["node.js","javascript"],
  7. "repository": {
  8. "type": "git",
  9. "url": "https://path/to/url"
  10. },
  11. "license":"MIT",
  12. "engines": {"node": "0.10.x"},
  13. "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
  14. "contributors":[{"name":"李四","email":"lisi@example.com"}],
  15. "scripts": {
  16. "start": "node index.js"
  17. },
  18. "dependencies": {
  19. "express": "latest",
  20. "mongoose": "~3.8.3",
  21. "handlebars-runtime": "~1.0.12",
  22. "express3-handlebars": "~0.5.0",
  23. "MD5": "~1.2.0"
  24. },
  25. "devDependencies": {
  26. "bower": "~1.2.8",
  27. "grunt": "~0.4.1",
  28. "grunt-contrib-concat": "~0.3.0",
  29. "grunt-contrib-jshint": "~0.7.2",
  30. "grunt-contrib-uglify": "~0.2.7",
  31. "grunt-contrib-clean": "~0.5.0",
  32. "browserify": "2.36.1",
  33. "grunt-browserify": "~1.3.0",
  34. }
  35. }
  • version 表明了当前的版本。
  • name 设置了应用程序/软件包的名称。
  • description 是应用程序/软件包的简短描述。
  • main 设置了应用程序的入口点。
  • private 如果设置为 true,则可以防止应用程序/软件包被意外地发布到 npm。
  • scripts 定义了一组可以运行的 node 脚本。
  • dependencies 设置了作为依赖安装的 npm 软件包的列表。
  • devDependencies 设置了作为开发依赖安装的 npm 软件包的列表。
  • engines 设置了此软件包/应用程序在哪个版本的 Node.js 上运行。
  • browserslist 用于告知要支持哪些浏览器(及其版本)。

属性说明

main

设置软件包的入口点。
当在应用程序中导入此软件包时,应用程序会在该位置搜索模块的导出。

示例

  1. "main": "src/main.js"

scripts

可以定义一组可以运行的node脚本

  1. "scripts": {
  2. "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  3. "start": "npm run dev",
  4. "unit": "jest --config test/unit/jest.conf.js --coverage",
  5. "test": "npm run unit",
  6. "lint": "eslint --ext .js,.vue src test/unit",
  7. "build": "node build/build.js"
  8. }

这些指定了运行脚本命令的npm命令行缩写。 可以通过调用 npm run XXXX 或 yarn XXXX 来运行它们,其中 XXXX 是命令的名称。 例如:npm run dev。

dependencies

设置作为依赖安装的 npm 软件包的列表

当使用 npm 或 yarn 安装软件包时:

  1. npm install <PACKAGENAME>
  2. yarn add <PACKAGENAME>

该软件包会被自动地插入此列表中。
示例

  1. "dependencies": {
  2. "vue": "^2.5.2"
  3. }

devDependencies

设置作为开发依赖安装的 npm 软件包的列表
它们不同于 dependencies ,因为它们只需要安装在开发及其上,而无需在生产环境中运行代码

注意:—save 参数表示将该模块写入 dependencies 属性。—save-dev 则是 devDenpencies 属性

当使用 npm 或 yarn 安装软件包时:

  1. npm install --save-dev <PACKAGENAME>
  2. yarn add --dev <PACKAGENAME>

示例:

  1. "devDependencies": {
  2. "autoprefixer": "^7.1.2",
  3. "babel-core": "^6.22.1"
  4. }

engines

设置此软件包/应用程序要运行的 Node.js 或其他命令的版本。

示例

  1. "engines": {
  2. "node": ">= 6.0.0",
  3. "npm": ">= 3.0.0",
  4. "yarn": "^0.13.0"
  5. }

browserslist

用于告知要支持哪些浏览器(及其版本)。 Babel、Autoprefixer 和其他工具会用到它,以将所需的 polyfill 和 fallback 添加到目标浏览器。

示例

  1. "browserslist": [
  2. "> 1%",
  3. "last 2 versions",
  4. "not ie <= 8"
  5. ]

此配置意味着需要支持使用率超过 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

https://segmentfault.com/a/1190000039684460#item-6-8