npm install 原理

news2024/9/29 1:15:17

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/398945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基于springboot仓库管理系统的设计与实现

项目介绍 基于 SpringBoot 的仓库管理系统拥有多种角色,可供用户自定义使用。 功能模块 一、业务模块 1、客户管理 2、供应商管理 3、商品管理 4、商品进货管理 5、商品退货管理 6、商品销售管理 7、商品销售退货管理 二、系统模块 菜单管理,角色管…

Java高级工程师特别熟悉的js基础 | 面向对象编程/原型链/继承

面向对象编程/原型链/继承 面向对象编程 什么是面向对象编程? 面向对象是⼀种编程思想,经常被拿来和⾯面向过程⽐比较。其实说的简单点,面向过程关注的重点是动词,是分析出解决问题需要的步骤,然后编写函数实现每个步…

WIFI标签操作步骤

1. 打开并设置手机WIFI热点,设置SSID为ESL,密码为123456789(如下图) ​ 2. 运行APP,设置要接入的WIFI名称密码等信息(如下图) ​ 3. 长按背面按键(长按2-3秒)&#xff0c…

TypeScript 深度剖析:TypeScript 的理解?与 JavaScript 的区别?

一、是什么 TypeScript 是 JavaScript 的类型的超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等 超集,不得不说另外一个概念,子集,怎么理解这两个呢,举个例子,如…

MYSQL 最大连接数

MYSQL 最大连接数? 最大连接数也就是mysql服务最大支持多少客户端连接服务 查看服务支持最大连接数: show variables like %max_connections%;如下: 如何查看 MYSQL 服务被多少个客户端连接了? show processlist;如下: 其中 …

数位dp--Windy数

题目 思路 大体思路其实也跟第一篇博客类似,用前缀和的思想处理区间的方案数,然后求方案数则是通过把每一位数都拆分来,然后根据两种选择0-an-1和选an两种情况进行判断,但是因为前导零会对结果产生不一样的结果(比如0…

企业的ICP域名注册,你知道吗?

ICP域名备案查询的api接口,是企业在短时间内获得中沃公司最新数据的API接口。还可以帮助用户快速了解公司信息。基于域名的注册信息实时查询,适合对注册信息变更及时性要求较高的用户。通过ICP信息可以确认企业在互联网中的更多活动轨迹。企业的ICP域名注…

漏洞分析丨cve20110104

作者丨黑蛋目标程序调试工具16进制编辑器XP SP3office 2003ollydbg010Editor三、漏洞验证首先我们配置环境,并下载poc:使用ollydbg附加office excel 2003:打开poc可以看到发生了访问违规异常,像地址0x51453844中写入时发生异常&am…

【专项训练】分治、回溯

分治、回溯其实就是递归,只是是递归的一个细分,是一种特殊的递归 碰到一个题目,你就找他的重复性 最近重复性:根据重复性怎么构造以及如何分解,包括:分治、回溯 最优重复性:动态规划 本质:找重复性、分解问题、组合子问题的结果 回溯:试错! 50. Pow(x, n) https:…

sivalco使用测试pin正向导通

在学完功率半导体器件后,为了能够更好的了解功率半导体器件内部的相关性质,于是利用sivalco软件进行仿真,对于器件工作时相关数据进行分析,对于相关语句进行学习。 在功率半导体中以N或者P半导体进行掺杂获得我们所需要的器件&…

linux重置root用户密码

重置root密码 法一:rd.break 第 1 步:重启系统编辑内核参数 第 2 步:找到 linux 这行,在此行末尾空格后输入rd.break (End键也可直接进入行尾) 成功后显示页面为: 第 3 步:查看。…

华为HCIE学习之Openstack Cinder组件(cinder对接glusterfs)

文章目录一、MQ的作用二、cinder架构图三、各组件的作用四、cinder对接glusterfs一、MQ的作用 服务内各组件交互通过MQ进行 二、cinder架构图 IET,Linux用软件做存储,CNA识别过去就是IETTGT,物理存储,CNA识别过去就是TGT 三、…

十、FilterListenerAjax案例

1,Filter 1.1 Filter概述 Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。Servlet 我们之前都已经学习过了,Filter和Listener 我们今天都会进行学习。 过滤器可以把对资源的请求拦截下来,从而实现一些…

公司的代理怎么用

前一阵子用公司的服务器玩docker的时候,发现拉取不了远程镜像。咨询了一下网络管理员,说是非常时期,外网权限全部关闭。这严重阻碍了我的求知欲望。于是想到了使用代理。这里简单解释一下,很多大型公司为了确保网络安全&#xff0…

2-6 SpringCloud快速开发入门: Eureka 服务注册中心发现与消费服务

接上一章节向Eureka 服务注册中心注册服务,这里讲讲Eureka 服务注册中心发现与消费服务 Eureka 服务注册中心发现与消费服务 我们已经搭建一个服务注册中心,同时也向这个服务注册中心注册了服务,接下来我们就可以发现和消费服务了&#xff0…

图像分割(Unet算法学习笔记)

知识提要 数据集使用VOC2012 CNN 卷积神经网络Convolutional Neural Network GPU图像处理单元Graphic Processing Unit)图形处理器 convolution 卷积 ReLU全名Rectified Linear Unit,意思是修正线性单元 bn全称Batch Normalization批标准化 FC全连接神经网络是一种…

打怪升级之CFile类

CFile类 信息源自官方文档:https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cfile-class?viewmsvc-170。 CFile是Microsoft 基础类文件类的基类。它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。CFile与…

第二天作业docker安装

目录 一Docker的简介、下载 二Docker的安装: 2.1 上传安装包:通过xftp直接将包拖拽到Linux里面即可 2.2 安装: 2.3 启动docker 2.4 配置Docker的镜像加速器: 2.5 刷新守护进程: 2.6 重启docker: 2.7 效验配置是否成功 …

三板斧解决leetcode的链表题

在《波奇学单链表》中我们提到单链表的两个特点单向性。头节点尾节点的特殊性导致分类讨论的情况。如何看单链表?让我们简化成下图cur表示当前节点,下图表示cur移动,圆圈表示值用哨兵卫节点(新的头节点)和把尾节点看成NULL来把头尾节点一般化…

spring的beanfactory与applicationContext的区别以及继承关系

applicationContext继承关系 首先可以看一张图 ListableBeanFactory 可列举的bean工厂 hierarchical 分层bean工厂 messageSource 国际化信息 //国际化(internationalization)是设计和…