npm install 原理

npm基本使用

node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。在任何地方安装了node,那么就可以运行JavaScript。所以在服务器上就可以运行js了。js就全栈了。

node安装的同时就安装了npm。

直接去官网下载,双击安装即可。安装完毕之后,可以在命令行中使用node -v查看是否安装成功,以及对应的版本号。当安装好node之后会自带一个npm工具。所以npm不需要单独安装。

npm介绍

npm是 node package manager 简写。意思是 node 的包管理工具。node 的包其实就是辅助node开发的插件(包)。这个包里面有node的后台包,和所有的前端包。作为前端开发人员,开发项目的时候,会用到很多很多的插件(包/依赖),而且插件的版本是固定的,所以当团队合作的时候,就需要整合所有相关的包(工作量非常大,尤其是在以后的框架项目中,用到的插件成千上万个),那么npm就是一个管理这些包的工具,所以一会后的项目基本使用 npm 去管理项目的依赖。

如何使用npm管理项目依赖

当你在项目中想要使用某个依赖的时候,需要使用 npm install packageName下载到项目中使用。

需要将项目变成node项目(因为node项目中才能使用npm管理依赖),在项目文件夹内打开命令行工具执行 npm init ,会自动生成一个 package.json 文件,这个文件就是node项目的标志。

使用 npm 下载 jquery。执行 npm install jquery 在项目中下载 jQuery(最新版本)。下载完成后项目内多了一个 node_modules 文件夹,下载的依赖存在这里面。项目内的package.json文件内会多一个 dependencies 里面写了安装的依赖和对应的版本号

当使用了很多插件之后,node_modules 文件就会越来越大,传输很不方便,但是用了npm管理的,上传git的时候可以添加忽略文件忽略node_modules文件夹。然后再次使用的时候,直接在项目内运行 npm i 命令,就会按照 package.json 内记录的所有项目依赖以及对性的版本进行下载。

依赖的导入导出

  • 导入:

  • 通过node通过的 require :const package = require(packageName);

  • import package from "path"

  • 导出:module.exports = { ...data };

更多请查看: node模块化 和 require原理ES6的export和import

npm常见命令

// 等待下载包的时候默认没有任何的提示,可以使用 将所有的http请求打印到命令行中
npm config set loglevel=http

// 有些时候 npm官方的包下载很慢,可以使用替换下载的镜像源 通常我们会使用cnpm解决此类问题 详情看下文中的链接
npm config set registry https://registry.npm.taobao.org

// 清理全局缓存 缓存概念请看下文的 「npm install 原理」
npm cache clean --force

// 重新构建依赖
npm rebuild

// 获取缓存文件位置
npm config get cache

// 初始化node项目
npm init

/**
 * 安装和卸载packages 
 * install可以简写为i 
 * uniinstall可简写为uni 
 * 末尾添加-g为下载或卸载全局包
 * 末尾添加-D为只添加开发依赖,及devDependencies中而不是dependencies
*/
// 根据package.json安装packages
npm install 
// 下载对应的包的版本
npm install 包名@版本号 
// 卸载对应包
npm uniinstall 包名 卸载包 

cnpm介绍:cnpm的简介与使用

npm 命令官方文档:https://docs.npmjs.com/cli/v9/commands/

npm install原理

如果不了解 package.json 和 package-lock 这两个文件的作用,建议通过下面这篇文章了解了这两个文件的作用后再理解npm install的原理

详解package.json和package-lock

了解了package.json与package-lock.json的区别后,相信大家就很好的理解下面的图文了

如上图所示npm install 原理图解析

npm install会检测是否存在package-lock.json文件:

一、没有lock文件

  • 分析依赖关系,这是因为我们包会依赖其他的包,并且会多个包之间产生相同的依赖的关系。

  • 从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包)。

  • 获取到压缩包后会对压缩包进行缓存(从npm5开始有的)。

  • 将压缩包解压到项目的node_modules文件夹中。

二、有lock文件

  • 检测lock中包的版本是否和package.json中一致(会按照semver版本规范检测)。

  • 不一致,那么会重新构建依赖关系,直接会走顶层的流程。

  • 一致的情况下,会去优先查找缓存,没有找到,会从registry仓库下载,直接走顶层流程。

  • 查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值