我是靠谱客的博主 真实方盒,最近开发中收集的这篇文章主要介绍npm依赖管理相关知识Semvernpx的作用package.lock.json的作用依赖的区别与使用场景npm发布包流程npm常用命令,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • Semver
  • npx的作用
  • package.lock.json的作用
  • 依赖的区别与使用场景
    • dependencies
    • devDependencies
    • optionalDependencies
    • peerDependencies
  • npm发布包流程
  • npm常用命令


现在工作中做项目大都是vue-cli、react-create-app脚手架一把梭,工作的焦点更多是在写业务上,也就缺失了一些前端工程化所必要的知识,这篇主要记录一些npm管理相关的知识

Semver

Semver(语义化版本号)是一种软件版本号的语义化规范。

  1. 软件的版本通常由三位组成: X.Y.Z,整数且不可在数字前补零,对应主版本号.次版本号.修订号,例如: 2.1.14, 2.2.3
 - 主版本号(major):大版本的更新改动,做了不兼容的API修改
 - 次版本号(minor):添加新功能,可向下兼容
 - 修订号(patch):多用于修复bug,可向下兼容
  1. 当要发行大版本或者核心Feature但是不能保证功能100%正常时,就需要发布先行版本,一般包括alpha、beta、rc, 例如 2.1.14-rc.1
 - alpha: 内部版本
 - beta: 公测版本
 - rc: 正式版本的候选版本
  1. 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> --savenpm i <pkg> -S都会默认安装到dependencies中。

devDependencies

devDependencies为开发环境使用的依赖,如eslint等。
通过npm install <pkg> --save-devnpm 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发布包流程

发布包

  1. 在需要发布的包根目录下如无package.json文件,npm init 初始化生成package.json文件
  2. 确保package.json中的main属性对应打包输出的库文件路径
  3. npm adduser注册,填完邮箱后需要邮箱内点击链接进行邮箱验证
  4. npm login登录账户, npm whoami 可查看当前登录用户
  5. 确保自己不是在使用淘宝镜像,使用npm config get registry查看当前npm库
  6. 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常用命令所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部