npm install 原理
创始人
2024-05-31 06:45:46
0

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文件夹中。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...