导图社区 包管理工具
对包管理工具的整理,主要为npm,和yarn包管理工具。
编辑于2020-12-21 11:41:50包管理工具
1.包管理工具概述
模块:通常以单个文件形式存在的功能片段,入口文件通常称为入口模块或主模块
库:以一个或多个模块组成的完整功能模块,为开发中某一方面的问题提供完整的解决方案
包:包含元数据的库,元数据包括名称、描述、git主页、许可证协议、作者、依赖等
背景:CommomJS的出现,第三方库下载繁琐
npm(node package manager)node 包管理器,前端所有的包管理器都是基于npm的
npm由三部分组成:
registry:入口
官网
CLI:command-line interface 命令行接口
命令:npm -v/vision(查看npm版本) Ctrl+j(打开命令行接口)
2.npm
包的安装
安装npm
下载安装npm
设置淘宝镜像:npm config set registry https://registry.npm.taobao.org
检查镜像:npm config get registry
npm安装包
本地安装
npm -i/install lodash
npm -i/install lodash jquery
本地安装的包放在node_modules文件夹中
使用. gitignore忽略node_modules 文件夹
如果本地安装的包带有CLI,npm则会将他的CLI脚本文件放到node_modules/.bin下, 使用 npx 命令名 即可调用
全局安装
全局安装放在一个特殊的全局目录,使用 npm config get prefix 查看该目录
npm -i/install --global/g 包名
全局安装的包并非所有工程可用,它仅提供全局的CLI工具 调用命令时不需要加npx
大部分情况下,都不需要全局安装包,除非: 1. 包的版本非常稳定,很少有大的更新 2. 提供的 CLI 工具在各个工程中使用的非常频繁 3. CLI 工具仅为开发环境提供支持,而非部署环境
包配置
配置文件
配置文件的名称固定为包package. json,可以手动创建,大多数通过命令 npm init 创建
npm init --yes/y 自动填充默认配置(确保文件夹不是中文)
package. json最重要的是记录当前工程的依赖
dependencies:生产环境的依赖
devDependencies:仅开发环境的依赖
在package. json中配置好依赖后使用
npm -i/install 安装所有依赖
npm install --production 仅安装生产环境依赖
移植时只需要移植源代码和package. json文件
有package. json文件时使用命令自动写入依赖
安装包到生产环境
npm i 包名
npm i --save 包名
npm i --S 包名
安装依赖到开发环境
npm i --save--dev 包名
npm i -D 包名
子主题
包的使用
var _=require ("lodash") ; 如果模块路径不是以. /或.. /开头,node则默认导入的模块来自node_modules目录
var _ = require("./node_modules/lodash/index"); //可以没有index,原因是下面寻找文件的步骤
它首先会从当前目录的以下位置寻找文件 node_modules/lodash.js node_modules/lodash/入口文件
若当前目录没有这样的文件,则会回溯到上级目录按照同样的方式查找
如果到顶级目录都无法找到文件,则抛出错误
入口文件规则
查看导入包的package.json文件,读取main字段作为入口文件
若不包含main字段,则使用index.js作为入口文件
简易数据爬虫
语义版本
>,<,>=,<=,大于(等于),小于(等于)某个版本 >1.2.1 大于1.2.1版本
- 介于两个版本之间 1.3.4 - 2.1.2
x 不固定版本号 2.5.x 主版本号2,次版本号5,补丁版本号不固定
~补丁版本号可增 ~1.6.3 主次版本号固定,补丁版本号大于等于3
^ 次版本,补丁版本可增 ^2.3.4 主版本号固定,次版本号,补丁版本号可大于等于
* 始终使用最新版本
(扩展)npm的差异版本处理:如果两个包依赖同一个包的不同版本,在node_modules中,不会使用扁平目录结构,而会形成嵌套的目录结构
避免还原的差异:当移植工程时,如果移植了 package-lock.json 文件,恢复安装时,会按照 package-lock.json 文件中的确切依赖进行安装,最大限度的避免了差异
npm 脚本
启动工程命令(node 或 一些第三方包提供的CLI命令) 部署工程命令(一些第三方包提供的CLI命令) 测试工程命令(一些第三方包提供的CLI命令)
npm 非常贴心的支持了脚本,只需要在 package.json 中配置 scripts 字段,即可配置各种脚本名称 之后,我们就可以运行简单的指令来完成各种操作了
运行方式是 npm run 脚本名称
start,stop,test 不需要使用 run
细节: 脚本中可以省略npx start脚本有默认值:node server.js
运行环境配置
三种环境:生产,开发,测试环境
通过设置系统变量NODE_ENV来判断node程序处于何种环境
永久设置:环境变量设置 NODE_ENV=development/production/test
临时设置:配置scripts脚本,为避免差异,可以使用第三方库cross-env对环境变量进行设置
安装:npm i --D cross-env
在node中读取package. json
var config=require ("./package.json") console. log (config. sersion) ; config. log(config. a) ;
npm的其他命令
安装
精确安装最新版本:
npm install --save-exact 包名
npm install -E 包名
安装指定版本
npm install 包名@版本号
查询
查询包的安装路径
npm root [-g]
查看包信息
npm view 包名[子信息] 子信息(name. version等) view aliases:v info show
查询安装包
npm list [-g] [--depth=依赖深度] 深度从0开始 list aliases: ls la ll
更新
检查哪些包需要更新
npm outdated
更新包
npm update [-g] [包名] update aliases: up upgrade
卸载包
npm uninstall [-g] [包名] uninstall aliases:remove rm r un unlink
npm配置
安装好npm之后,最终会产生两个配置文件,一个是用户配置,一个是系统配置,当两个文件的配置项有冲突的时候,用户配置会覆盖系统配置
通过下面的命令可以查询目前生效的各种配置 npm config ls [-l] [--json]
1. 获取某个配置项
npm config get 配置项
2.设置某个配置项
npm config set 配置项=值
3.移除某个配置项
npm config delete 配置项
发布包
3.yarn
1. yarn简介
过去npm存在的问题
依赖目录嵌套深
下载速度慢
控制台输出频繁
工程移植问题
yarn诞生就解决了
使用扁平的目录结构
并行下载
控制台仅输出关键信息
使用yarn-lock文件记录确切依赖
且yarn优化了
增加了某些功能强大的命令
让既有命令更加语义化
本地安装的CLI工具可以使用 yarn 直接启动
将全局安装的目录当作一个普通的工程,生成package.json文件,便于全局安装移植
npm6版本
目录扁平化
并行下载
本地缓存
使用npm-lock文件记录确切依赖
增加了大量的命令别名
内置了npx,可以启动本地的CLI工具
极大的简化了控制台输出
2.yarn的核心命令
初始化
yarn init [ -y /--yes]
安装包
添加指定包:yarn [global] add package-name [--dev/-D](开发依赖) [--exact/-E] 安装package.json中的所有依赖:yarn install [--production/--prod](生产环境依赖)
脚本和本地CLI
运行脚本:yarn run 脚本名 start、stop、test可以省略run 运行本地安装的CLI:yarn run CLI名
查询
查看bin目录:yarn [global] bin 查询包信息:yarn info 包名 [子字段] 列举已安装的依赖:yarn [global] list [--depth=依赖深度] yarn的list命令和npm的list不同,yarn输出的信息更加丰富,包括顶级目录结构、每个包的依赖版本号
更新
列举需要更新的包:yarn outdated 更新包:yarn [global] upgrade [包名]
卸载
卸载包:yarn remove 包名
3.yarn 特别的礼物
yarn check
使用yarn check命令,可以验证package.json文件的依赖记录和lock文件是否一致 这对于防止篡改非常有用
yarn audit(npm也有了)
使用yarn audit命令,可以检查本地安装的包有哪些已知漏洞,以表格的形式列出
yarn why
使用yarn why 包名命令,可以在控制台打印出为什么安装了这个包,哪些包会用到它
yarn create
react的官方脚手架名称为create-react-app
yarn create react-app my-app # 等同于下面的两条命令 yarn global add create-react-app create-react-app my-app
4.其他包管理器
cnpm
过去,npm没有registry功能
淘宝提供了cnpm,镜像源,除不能使用publish命令外,其余都可使用