什么是package.json?

package.json是JavaScript我的项目的清单,该文件记录了你的我的项目的名称、版本、依赖等相干信息,同时它也是你将我的项目公布到npm上的根据,能够说,package.json在前端模块化时代,相当于我的项目的身份证,充沛理解package.json的用户和含意是前端必备过程

初始化package.json

通过npm或者yarn指令能够疾速创立package.json文件:

npm init -y// oryarn init -y

-y 示意创立默认的package.json,如果不应用-y,则会要求你被动填写json内容。

默认文件内容:

{  "name": "test",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "keywords": [],  "author": "",  "license": "ISC"}

package.json的配置

  • name

项目名称,必填字段,默认取的是以后我的项目的文件夹名字。

字段值限度:

  1. 长度必须 <= 214个字符,只能蕴含小写字母、'-'和'_'。如果我的项目要公布到npm,必须合乎该标准,即便不须要公布到npm,咱们仍应该准守这样的标准,养成好习惯
  2. 如果你的我的项目要公布到npm,name就不能与已有的包名反复,在创立package.json之前,咱们能够通过npm指令来查看是否名字反复:
npm view package-name

package-name替换成本人的我的项目名,如果npm上存在对应的包,会返回该包的模块信息,否则返回404

  • version

我的项目版本号,格局为 主版本号.次版本号.订正号,主版本号通常示意做了不兼容的API批改,次版本号通常示意做了向下兼容的的功能性新增,订正号示意做了向下兼容的bug修复

如果版本改变比拟大,运行不稳固,能够先公布后行版本,在惯例版本号前面通过'-'连贯标识符:外部版本(alpha)、公测版本(beta)和候选版本(rc),如:

'2.1.0.alpha''2.1.0-beta''2.1.0-rc'

后行版本后仍可接小版本后,示意不同的后行版本:

'2.1.0.alpha.1''2.1.0.alpha.5'

通过npm指令,能够查看线上npm包的最新版本以及版本记录

// 查看最新版本npm view package-name version// 查看所有版本号npm view package-name version
  • description

我的项目的简介,让他人晓得你的我的项目是用来做什么的,这在你公布到npm上时特地有用

  • main

main指定了我的项目的入口文件,当你制作一个插件公布到npm上后,他人通过import和require等形式导入你的我的项目时,导入的就是main指定的文件,如果不指定main字段,则会在导入时主动寻求根目录下的 index.js、index.json等index命名的文件,如果没有找到,导入就会报错。

  • scripts

定义我的项目node脚本,通过key-value的模式定义脚本名脚本执行内容,前端我的项目中通过 npm run xxyarn xx 执行对应脚本。比方:npm run dev

比拟少人晓得的一种用法是:通过非凡的命名,能够达到命令前置、后续的操作,比方当你开发运行我的项目开发时,心愿我的项目文档服务先启动,能够这样实现:

{    // ...    "scripts": {        "dev": "npm run server",        "predev": "npm run docs"    }}

当你运行指令 npm run dev 时,其中 predev 指令会先执行完,如果你心愿后续再执行其余指令,能够应用 postdev 命令名。

predevpostdev中的dev对应你的dev指令名
  • keywords

我的项目的关键词,有助于npm上的搜寻

  • author

我的项目作者,能够应用字符串,能够应用对象:

{    "author": "landejin <1294619453@qq.com> (http://landejin.cn)"}
{    "author": {        "name": "landejin",        "email": "1294619453@qq.com",        "url": "http://landejin.cn"    }}
  • license

我的项目遵循的协定

  • contributors

我的项目协作者,应用数组,和author一样能够填写字符串或者对象

{    "contributors": [        "landejin <1294619453@qq.com> (http://landejin.cn)"    ]}
  • bugs

我的项目的的问题跟踪器,个别能够链接到github的issues

{  "bugs": "https://github.com/nodejscn/node-api-cn/issues"}
  • engines

我的项目运行的版本信息,该配置只起阐明作用

{    "engines": {      "node": ">= 6.0.0",      "npm": ">= 3.0.0",      "yarn": "^0.13.0"    }}
  • homepage

我的项目的主页,通常是官网文档之类的文档

{  "homepage": "http://nodejs.cn"}
  • private

申明以后包是公有包,防止误操作公布到npm上

{  "private": true}
  • dependencies

我的项目公布运行所依赖的npm包,当应用 npm install xx 时,用依赖包会主动写入该配置项

{    "dependencies": {      "vue": "^2.5.2"    }}
  • devDependencies

我的项目开发时所依赖的npm包,写在该配置的包示意只在开发过程中应用,而不会呈现在线上的代码中,比方ESLint、Less等

{    "devDependencies": {      "autoprefixer": "^7.1.2",      "babel-core": "^6.22.1"    }}
  • browserslist

用于标识我的项目反对的浏览器环境,babel、Autoprefixer和其余工具会用到该配置

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

具体的用户和配置能够参考: [https://www.npmjs.com/package...]


下面只列举了罕用的一些配置,package.json还有其余不罕用的、或者特定环境下的配置,就不列举了。