乐趣区

关于node.js:前端模块化的身份证packagejson

什么是 package.json?

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

初始化 package.json

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

npm init -y
// or
yarn 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 还有其余不罕用的、或者特定环境下的配置,就不列举了。

退出移动版