持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
这篇文章主要和大家分享前端包管理工具,是什么,怎么用和基本原理,通过阅读,我想至少能够帮助大家解决一些常见的面试问题。
1.npm 和 yarn 区别和联系
2.package.json和 package-lock.json 是干什么的,有什么用
3.npm install 之后发生了什么
4.如何发布一个自己的npm包*
我们通过JavaScript模块化的方式,把代码划分成一个小小的结构,并且封装成一个模块工具。 当我们的同事也想使用这个工具的时候,可以手动导入给他 当我们想分享给更多人的使用,该怎么做呢?一般来说方式有两种。
上传到github,其他人通过github下载我们的代码,手动引用
* 需要手动引用,手动管理依赖,手动控制风险较大。
* 当版本更新或者删除依赖时,需要重复上面的操作。
根据墨菲定律,凡是可能出问题的地方,就必出发生问题,这种方式是有效的方法,但觉得不是一个方便的方法,就像我们经常所说的,理论上可行,实际开发中不可用
使用专业的包管理工具来管理我们代码
这也就是我今天要和大家分享的包管理工具
npm 全称Node Package Manager node包管理工具,现在已经不仅仅局限于node包,在前端项目里我们也使用他来管理依赖包,比如vue,vue-router,vuex,express,koa,react,axios,babel,webpack。
npm 属于node的管理工具,当我们下载安装node的时候,就会一起安装npm
npm 管理的包可以在npm 官网https://www.npmjs.org/
我们发布自己的包其实是发布到registry上面的,当我们安装一个包时其实是从registry上面下载的包 https://registry.npmjs.org
现在前端开发有大量的包,那么我们用npm管理管理这么多包,无论前端项目vue,react,还是后端项目express,koa,egg,都会一个配置文件,这个配置文件记录这项目的名称,版本号,项目描述,项目依赖库和依赖库的版本号。
可以使用npm init 生成一个package.json 文件
也可以通过脚手架创建一个项目,帮助我们自动生成package.json
npm 包版本一般规范为为X.Y.Z
X 为主版本号 一般为大版本更新,可能不兼容之前的版本,如Vue2.0和Vue3.0
Y 为次版本号 一般为新增一恶搞功能,向下兼容,如Vue2.0和Vue2.x
Z 为修订版本号 一般是修复了小问题,小版本优化
我们常见的版本号形如这样
^x.y.z:表示x是保持不变的,y和z永远安装最新的版本;
~x.y.z:表示x和y保持不变的,z永远安装最新的版本;
** package-lock.json文件解析**
卸载某个依赖包:
npm uninstall package
npm uninstall package --save-dev
npm uninstall package -D
强制重新build
npm rebuild
清除缓存
npm cache clean
早期的npm 安装依赖速度慢,依赖管理混乱,所以提出了yarn yarn通过缓存和生产package.json 文件这些方式来加快安装速度,依赖管理清晰。 在npm5之后,npm 也借鉴了yarn的思想,现在两个已经性能相当
所以当有人问起yarn 和npm 的区别时,就可以说上面的话术,展开说说缓存策略和依赖管理方式。 为了降低学习成本,所以两者命令上区别不大,
很多时候,我们下载一些依赖包的时候,从地址https://registry.npmjs.org 拉取用资源,会安装失败 所以淘宝维护了一套淘宝源的镜像仓库,定时从https://registry.npmjs.org 去拉取最新包,便于国内开发下载
查看npm镜像:
npm config get registry
我们可以直接设置npm的镜像
npm config set registry https://registry.npm.taobao.org
当我们想和原来的npm 区分开时,也不想修改原有npm源时,建议使用cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm config get registry
返回 https://r.npm.taobao.org/ 则安装成功
npx是npm5.2之后自带的一个命令,一般用于它来调用项目中的某个模块
我们以webpack为例: 全局安装的是webpack5 项目安装的是webpack3 如果我在终端执行 webpack --version使用的是哪一个命令呢?
显示结果会是 webpack5,事实上使用的是全局的,为什么呢?
原因非常简单,在当前目录下找不到webpack时,就会去全局找,并且执行命令;
那么我想使用 局部的webpack版本,该怎么办呢
"scripts": {
"webpack": "webpack --version"
以npm为切入点,展开说了npm 的属性和原理,方便大家理解,也简单介绍了其他包管理工具和npm 比较相似的一些指令,希望能对大家有所帮助。
现在前端最火的应该是pnpm,我在下篇文章会和大家分享,敬请期待
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有