概述
目录
- Semver
- npx的作用
- package.lock.json的作用
- 依赖的区别与使用场景
- dependencies
- devDependencies
- optionalDependencies
- peerDependencies
- npm发布包流程
- npm常用命令
现在工作中做项目大都是vue-cli、react-create-app脚手架一把梭,工作的焦点更多是在写业务上,也就缺失了一些前端工程化所必要的知识,这篇主要记录一些npm管理相关的知识
Semver
Semver(语义化版本号)是一种软件版本号的语义化规范。
- 软件的版本通常由三位组成: X.Y.Z,整数且不可在数字前补零,对应主版本号.次版本号.修订号,例如: 2.1.14, 2.2.3
- 主版本号(major):大版本的更新改动,做了不兼容的API修改
- 次版本号(minor):添加新功能,可向下兼容
- 修订号(patch):多用于修复bug,可向下兼容
- 当要发行大版本或者核心Feature但是不能保证功能100%正常时,就需要发布先行版本,一般包括alpha、beta、rc, 例如 2.1.14-rc.1
- alpha: 内部版本
- beta: 公测版本
- rc: 正式版本的候选版本
- npm依赖时,npm install 安装第三方包,把依赖的包名和版本号写入到package.json文件中,此时版本号一般有四种情况:
- 固定版本号,安装固定版本: 1.2.0
- 兼容版本新发布的补丁版本,会安装X.Y一致,Z最新的版本,可以保证依赖包更新修复bug时能及时得到修复,又不会产生兼容性问题:~1.2.0、1.2.x、1.2
- 兼容模板新发布的小版本、补丁版本,会安装X一致,Y.Z最新的版本: ^1.2.0、1.x、1
- 兼容模块新发布的大版本、小版本、补丁版本,会安装最新版本: *、x
- 当项目package.json的依赖中没有对应依赖包并且命令行输入
npm i <pkg>
不指定版本号时,默认等于npm i <pkg>@latest
,即等于安装依赖的最新版本。 - 输入
npm i <pkg>@latest
可手动更新最新版本包 - 当输入
npm i <pkg>@next
时为安装依赖的最近开发版本(–tag = next)。 - 当输入
npm i <pkg>@X.Y.Z
时安装特定版本。
npx的作用
1.全局命令,避免全局安装
执行npx create-react-app my-app
时可将create-react-app下载到临时目录而不必全局安装,使用之后删除,但也因此下次执行需要重新下载。
利用这一点也可以指定版本执行命令,如
npx node@6.1.0 -v
2.调用项目安装的模块(本地bin寻址)
npm i mocha -D
包配置了bin后,在安装后会在node_modules/.bin
下有相应的指令方便执行:
node-modules/.bin/mocha --version
或者需要在package.json中的scripts
字段下配置对应命令
"scripts": {
"test": "node-modules/.bin/mocha --version"
},
用npx的情况下,只需:
npx mocha --version
原理是npx运行时会到node_modules/.bin
路径和环境变量$PATH下寻找命令
package.lock.json的作用
package.json里更多是定义版本范围(如^1.0.0),最终npm i 安装的版本需要解析后决定。同一个package.json下,不同参与者npm install
后,node_modules下实际安装的文件版本可能不同。因此需要有package.lock.json。
npm官网对package.lock.json的定义:
package.lock.json会在npm修改 node_modules树 或 package.json 时自动生成,它描述了生成的确切树,后续不管中间依赖项如何更新,安装时都能够生成相同的树。
package.lock.json的作用:
- 描述依赖关系树的单一表示,以保证团队成员、部署和持续集成安装完全相同的依赖关系,确定明确唯一的node_modules树
- 为用户提供一种工具来回溯node_modules(node_modules本身不提交代码库)
- 提供了依赖树结构的可视化代码
- 允许npm跳过以前安装过的包(node_modules)来优化安装过程。
目前(npm@5.4.2之后)安装逻辑是:如果改了package.json,且package.json和lock文件不同,那么执行npm i
时npm会根据package中的版本号和语义去下载最新的包,并更新至lock
依赖的区别与使用场景
常用的npm依赖管理主要包括以下两类:
- dependencies
- devDependencies
- optionalDependencies
- peerDependencies
dependencies
dependencies为开发和生产环境都需要使用的依赖,例如 React,Axios等。
npm install <pkg>
或 npm install <pkg> --save
或 npm i <pkg> -S
都会默认安装到dependencies中。
devDependencies
devDependencies为开发环境使用的依赖,如eslint等。
通过npm install <pkg> --save-dev
或 npm i <pkg> -D
都会安装到devDependencies中。
执行
npm install
时默认安装dependencies和devDependencies中的依赖。
当执行npm install --production
时,只会安装dependencies,忽略devDependencies,在线上环境或者node项目中可以减少安装包的数量和大小。
optionalDependencies
optionalDependencies 为可选依赖,当希望依赖即使下载失败或没有找到时项目也能正常运行,就把相关依赖放进optionalDependencies中。
peerDependencies
peerDependencies用于指定插件的依赖的包版本,比如A插件依赖于B且需要B版本 >= 2.1.4,则当我们使用A插件时需要先安装B >= 2.1.4
版本的包。
"peerDependencies": {
"B": ">= 2.1.4",
},
npm发布包流程
发布包
- 在需要发布的包根目录下如无package.json文件,
npm init
初始化生成package.json文件 - 确保package.json中的main属性对应打包输出的库文件路径
npm adduser
注册,填完邮箱后需要邮箱内点击链接进行邮箱验证npm login
登录账户,npm whoami
可查看当前登录用户- 确保自己不是在使用淘宝镜像,使用
npm config get registry
查看当前npm库 npm publish
发布包
每次更新后都需要按照semver规范修改版本再进行发布
删除包
npm unpublish [package] --force
npm常用命令
npm info <packageName>
查看远程包信息
npm ls <packageName>
查看本地安装的包版本
npm set registry https://registry.npm.taobao.org
设置淘宝镜像
npm config get prefix
获取本地包全局安装位置(即需要配在环境变量的path)
npm config set prefix
设置本地包全局安装位置(get为空时可设置,可解决全局安装的工具使用时报命令not found的问题)
文章为学习笔记,如有错漏希望不吝赐教~
参考资料:
npx使用教程
Semver(语义化版本号)扫盲
npm 依赖管理中被忽略的那些细节
最后
以上就是真实方盒为你收集整理的npm依赖管理相关知识Semvernpx的作用package.lock.json的作用依赖的区别与使用场景npm发布包流程npm常用命令的全部内容,希望文章能够帮你解决npm依赖管理相关知识Semvernpx的作用package.lock.json的作用依赖的区别与使用场景npm发布包流程npm常用命令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复