关于npm的记录
-
npm的官方网站:https://www.npmjs.com 可以查询所有可以使用npm下载的包和版本,也可以自己注册发布自己的开源代码包;
-
npm 的包的管理:package.json配置文件
-
文件的生成获取:
- 手动创建项目:npm init -y
- 通过手脚架创建项目,手脚架会帮我们生成这个文件(例如vue项目的创建)
-
常见的属性说明:
{ "name": "npmdemo", //项目名称 "version": "1.0.0", //当前项目的版本号; "description": "", //是描述信息,很多时候是作为项目的基本描述; "main": "index.js", //设置程序的入口, "private": true, //private属性记录当前的项目是否是私有的,当值为true时,npm是不能发布它的,这是防止私有项目或模块发布出去的方式;vue项目私有项目创建的时候一般都是默认给true的 "scripts": { //用于配置一些脚本命令,以键值对的形式存在;配置后我们可以通过 npm run 命令的key来执行这个命令 "why": "node ./scripts/why.js", "test": "", "start": "" }, "author": "", //作者相关信息(发布时用到); "license": "ISC", //开源协议(发布时用到); "dependencies": {//指定无论开发环境还是生成环境都需要依赖的包;通常是我们项目实际开发用到的一些库模块vue、vuex等,安装命令npm install webpack --save(这个可以简写为-S) "axios": "^0.24.0", "element-plus": "^1.2.0-beta.1", "vue": "^2.6.14" }, "devDependencies": { //一些包在生成环境是不需要的,比如webpack、babel等,我们会通过 npm install webpack --save-dev(这个可以简写为-D),将它安装到devDependencies属性中; "webpack": "^5.61.0", "webpack-cli": "^4.9.1" },//peerDependencies属性:有一种项目依赖关系是对等依赖,也就是你依赖的一个包,它必须是以另外一个宿主包为前提的;比如element-plus是依赖于vue3的,ant design是依赖于react、react-dom; "engines": {},//用于指定Node和NPM的版本号 "browserslist": {} //用于配置打包后的JavaScript浏览器的兼容情况 }
-
版本号
- 版本规范是X.Y.Z(^2.0.3或~2.0.3):
- X主版本号(major):当你做了不兼容的 API 修改(可能不兼容之前的版本);
- Y次版本号(minor):当你做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本);
- Z修订号(patch):当你做了向下兼容的问题修正(没有新功能,修复了之前版本的bug);
- ^和~的区别:
- ^x.y.z:表示x是保持不变的,y和z永远安装最新的版本;
- ~x.y.z:表示x和y保持不变的,z永远安装最新的版本
- 版本规范是X.Y.Z(^2.0.3或~2.0.3):
-
npm install命令
- 安装npm包分两种情况:
- 全局安装(global install): npm install webpack -g;
- 项目(局部)安装(local install): npm install webpack
- 两种安装方式 的区别:通常使用npm全局安装的包都是一些工具包:yarn、webpack等;并不是类似于 axios、express、koa等库文件;所以全局安装了之后并不能让我们在所有的项目中使用 axios等库;
- 安装npm包分两种情况:
-
npm install的原理
-
执行install命令:
-
有package-lock.json文件:
-
检测lock中包的版本是否和package.json中一致(会按照semver版本规范检测,~x.y.z);
- 不一致,那么会重新构建依赖关系,直接会走顶层的流程;
- 一致的情况下,会去优先查找缓存
- 没有找到,会从registry仓库下载,直接走顶层流程;
- 查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中;
-
-
没有package-lock.json文件:
- 分析依赖关系,这是因为我们可能包会依赖其他的包,并且多个包之间会产生相同依赖的情况;
- 从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包);
- 获取到压缩包后会对压缩包进行缓存(从npm5开始有的,建立索引,方便下次安装同样的包查找);
- 将压缩包解压到项目的node_modules文件夹中
-
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!