package.json 配置项说明,依赖版本说明

目录

1. package.json 是什么

2. package.json 配置项说明

name

version

author

contributors

description

keywords

private

license

scripts

dependencies

devDependencies

peerDependencies

bin

main

module

files

repository

bugs

gitHooks

lint-staged

engines

browserslist

homepage

3. package.json 内依赖的版本号

3.1 版本号的含义

3.2 版本范围

3.3 修改版本号的正确姿势


1. package.json 是什么

package.json 是一个 JSON 文件,位于项目的 根目录

package.json 包含关于项目的以下数据:

  • 元数据(如项目名称和说明)
  • 功能元数据(如程序包版本号、程序所需的依赖项列表等,在 3 中会详细描述)

package.json 使 npm(yarn)可以启动项目、运行脚本、安装依赖项、发布到 NPM 注册表以及许多其他有用的任务(package.json 配置了如何与程序进行交互,如何运行程序的方法)

npm(yarn)通过 package.json 来识别项目,并处理项目的依赖关系;npm(yarn)可以在项目的整个生命周期内,生成和更新 package.json

2. package.json 配置项说明

name

作用:定义了 包的名称、项目/模块名称

格式:name 不能超过 214 个字符;只能包含小写字母、下划线、连接线;并且必须是 URL安全的(不能以 "." (点) 或者 "_" (下划线) 开头)

备注:如果软件包需要发布到 NPM,则 name 属性 必需设置 且 保证全网唯一性(因为发布到 NPM 注册表时,软件包以这个变量作为名称);如果软件包不需要发布到 NPM,则 name 无需保持全网唯一性

version

作用:规定了 软件包的当前版本

备注:软件包发布于 NPM 之前,它的 version 是必填的;新版本的软件包发布到 NPM 之前,版本号会增加;

author

作用:项目开发者,必须是在 npm 的有效账户名

格式:遵循 “账户名<邮件>(url)” 的规则,email 和 url 是可选的

举个栗子:

lyrelion lyrelion@163.com

"author": { 
  "name" : "lyrelion", 
  "email" : "lyrelion@163.com",
  "url" : "http://lyrelion.cn.com/"
}

"author": "lyrelion <lyrelion@163.com> (http://lyrelion.cn.com)"

contributors

作用:项目贡献者

备注:contributors 与 author 字段的功能类似,他们的区别在于:author 只有一个人,contributors 则可以有多个人

举个栗子:

"contributors": [
  { 
    "name" : "lyrelion", 
    "email" : "lyrelion@163.com",
    "url" : "http://lyrelion.cn.com/"
  },
  { 
    "name" : "lyrelion2333", 
    "email" : "lyrelion2333@163.com",
    "url" : "http://lyrelion2333.cn.com/"
  }
]

description

作用:描述(一个字符串),是软件包的简短摘要

备注:开发者在使用 npm search 时,可以通过 description 找到这个包

keywords

作用:关键字(一个字符串数组),作用与描述相似

备注:开发者在使用 npm search 时,可以通过 keywords 任一字符串 找到这个包;如果软件包不需要不发布到 NPM,则 keywords 用处不大,可以忽略

private

作用:规定了 是否私有,private 设置为 true 时,npm 拒绝发布,这是也是一个防止意外发布 私有库 的方式;

备注:如果软件包只发布在 内部 registry,则需要在 publishConfighash 中,重写 registry;registry 翻译:登记处;

举个栗子:

 "publishConfig": {
    "registry": "http://233.233.0.233:8081/repository/npm-vue-components/"
  },

license

作用:规定了 软件包授权条款,定义了代码许可证;许可证可能会限制某些开发人员或组织对当前软件包的使用

格式:license 字段的值,通常是许可证的标识符代码(例如 MITISC 之类的字符串,它们代表 MIT 许可证和 ISC 许可证);如果你不想提供许可证,则可以将 UNLICENSED 作为许可证

scripts

作用:定义了一些 npm 命令的简写,通过这些 npm 命令,可以运行脚本

备注:官方规定,"start" 指定了运行 "npm run start" t时,所要执行的命令

举个栗子:假设我这么写:"npm run start": "vite start"(或者 "start": "vite start"),那就意味着,我在执行 "npm run start" 命令时,就相当于执行 "vite start" 命令

dependencies

作用:定义了 生产环境下,项目运行所需依赖;dependencies 字段是一个对象(包名做为键,版本范围作为值);npm 通过 dependencies 字段,知道要安装哪些包(以及什么版本)

备注:

  • 使用 npm 安装依赖时,依赖会被下载到 node_modules/ 文件夹中,依赖名和版本号会被添加到 dependencies 字段内
  • 在依赖版本中看到的插入符号(^)和波浪号(~),是 SemVer 中规定的 版本范围 的表示法

devDependencies

作用:定义了 开发环境下,项目所需依赖;

举个栗子:在开发过程中使用 ESLint,也只在开发过程中用,一旦程序部署并投入生产,将不会再使用 ESLint

peerDependencies

作用:指定 插件 所需要的 主工具的版本

bin

作用:规定了 内部命令 对应的 可执行文件的 路径

举个栗子:

  • 假设有一个内部命令,他叫 someTool,someTool 命令对应的可执行文件为 bin 目录下的 someTool.js;
  • Npm 会寻找这个文件,在 node_modules/.bin/ 目录下建立符号链接;也就是说,someTool.js 会建立符号链接 node_modules/.bin/someTool;
  • 由于 node_modules/.bin/ 目录,会在运行时 加入系统的 PATH 变量,因此在运行 npm 时,就可以不带路径,直接通过命令来调用这些脚本;
// 此处的 bin,规定了 内部命令someTool 对应的 可执行文件的路径是./bin/someTool.js
"bin": {
  "someTool": "./bin/someTool.js"
}

// 下面规定了 执行 npm run start 时,调用 内部命令 someTool
"scripts": {  
  "start": 'someTool build'
}

// 如果不定义 bin,那么上面的 scripts 字段就需要写完整,如下所示
"scripts": {  
  "start": './node_modules/bin/someTool.js build'
}

main

作用:入口文件,项目默认执行文件

举个栗子:

  • require(‘webpack’);会加载  lib 目录下的 webpack.js 文件
  • 如果没有设置入口文件,则默认加载  项目根目录下的 index.js 文件

module

作用:规定了 以 ES Module (也就是 ES6) 模块化方案进行加载时的 入口文件

备注:

  • 早期没有 ES6 模块化方案时,一般遵循 CommonJS 规范;CommonJS 规范的包通过 main 字段指定入口文件
  • 后来出现了 ES6 模块化方案(效率更高),为了和 CommonJS 规范进行区分,就新增了 module  字段指定入口文件
  • 现在一般会优先使用 module 字段作为入口,没有 module 字段时才使用 main 字段作为入口

files

作用:定义了 被项目包含的文件名数组(包含文件夹中的文件,除非被其他配置忽略)

举个栗子:比如 .npmignore文件,它如果硬要忽略某个文件,那么 files 里写了这个文件名也没用,最终这个文件会被忽略;也就是说  .npmignore文件配置的优先级 高于 files

repository

作用:定义了 项目仓库地址(源代码所在的 url )及其使用的版本控制系统的类型(Git、SVN 等)

举个栗子:

"repository" : {
  "type" : "git",
  "url" : "http://github.com/isaacs/npm.git"
}

bugs

作用:定义了 bug 提交地址

举个栗子:

"bugs": { 
	"url" : "http://github.com/owner/project/issues" ,
  "email" : "project@hostname.com"
}

gitHooks

作用:定义了 Git 提交之前,要做的代码质量检查

举个栗子:

"gitHooks": {
  "pre-commit": "lint-staged"
}

lint-staged

作用:定义了 要做的代码检查

举个栗子:

"lint-staged": {
  "*.{js,ts,vue}": "eslint --fix",
  "*.{scss}": "prettier --write"
}

engines

作用:规定了 项目所需要的 Node.js / yarn / npm 版本

举个栗子:

"engines": {
  "node": ">=8.9.1",
  "npm": ">=5.5.1",
  "yarn": ">=1.3.2"
}

browserslist

作用:规定了 项目所支持的浏览器

举个栗子:

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

homepage

作用:规定了 项目的官网地址(URL)

3. package.json 内依赖的版本号

3.1 版本号的含义

npm 模块 完整的版本号为【主版本 . 次要版本 . 补丁版本】

如果模块有变动,通常按照以下规则,更新版本号

  • 修复 bug,需要更新补丁版本
  • 新增功能,但是向下兼容,需要更新次要版本
  • 大变动,向下不兼容,需要更新主版本

3.2 版本范围

指定版本

比如 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,也就是说,安装时不改变大版本号

latest

安装最新版本

注意:如果大版本号为 0,则插入号的行为与波浪号相同(只更新补丁,不更新次要版本),这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容

3.3 修改版本号的正确姿势

项目开发过程中,最好使用 npm 的命令 npm installnpm uninstallnpm update 来管理依赖项,这样可以使你的 package.json 和 node_modules/ 文件夹保持同步

package.json | npm 安装文档npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系。http://caibaojian.com/npm/files/package.json.html

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyrelion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值