npm 包管理工具

news2024/7/4 2:34:59

简介

Node官网:https://nodejs.org/
Npm官网:https://www.npmjs.com/

在现代的软件开发世界中,包管理工具起着至关重要的作用。它们为开发者社区提供了一种高效共享和使用代码的方式。在 JavaScript 的范畴内,npm(Node Package Manager)伫立在这一领域的前沿,成为了开发者在进行Web开发时不可或缺的工具之一。

npm 的诞生和崛起

npm是为Node.js设计的包管理器,由Isaac Z. Schlueter于2010年创立,它允许用户从npm仓库安装、分享、分发代码,并管理项目依赖性。如今,它已经成为世界上最大的软件注册表,拥有超过百万个包,为全球JavaScript程序员提供服务。

什么是包管理工具?

在深入探索npm之前,有必要理解“包管理工具”的概念。简单地说,包管理工具是一个允许开发者创建、分享、使用软件包的平台。软件包是一个包含代码、资源和元数据的文件集合,它们提供一种固化和封装功能、库和框架的方式。
还有哪些包管理工具?
yarnbower

npm 的核心特性

1. 依赖管理

npm让管理项目的依赖成为一个轻而易举的事。通过编辑package.json文件,开发者可以精确地指定依赖版本,npm会自动处理安装和更新。

2. 脚本运行

除了管理依赖,npm还允许开发者在package.json中定义脚本,这可以简化许多常见的开发任务,如启动应用、运行测试或者编译源代码。

3. 社区支持

npm的一个重要特性是其广泛的社区支持。无论你需要什么,你总能在npm中找到别人已经构建好的解决方案。

npm 和 Node.js

使用npm的主要场景之一是与Node.js结合。Node.js允许JavaScript运行在服务器端,而npm则为它提供了必要的第三方包支持,使得开发现代Web应用成为可能。

如何使用 npm?

安装和配置

安装Node.js会自动安装npm。一旦安装完成,你就可以使用npm命令行工具来安装、更新、删除包了。
https://nodejs.org/en/download
在这里插入图片描述

查看版本

node -v
npm -v

常用命令

查看npm的配置列表

npm config list

获取某一项配置

#获取包全局安装路径的前缀(-g全局安装在此目录,未指定全局安装在当前目录)
npm config get prefix
#获取包安装时缓存的路径
npm config get cache
#获取npm仓库地址
npm config get registry

配置使用国内仓库地址

第一种方法:使用cnpm代替npm

#安装cnpm后,用到npm的地方直接用cnpm代替即可
npm install cnpm -g --registry=https://registry.npm.taobao.org
#验证一下
cnpm config get registry

第二种方法:修改npm的仓库地址

#会生成npm的配置文件(C:\Users\ZZZYY\目录下的.npmrc),可查看验证
npm config set registry https://registry.npm.taobao.org
#验证一下
npm config get registry

注意:rc后缀的文件多是配置文件,可以看做run command的缩写。

如何修改全局安装路径?

第一步:在.npmrci配置文件中新增如下内容:

prefix=E:\npm\repo_node\npm
cache=E:\npm\repo_node\npm_cache

第二步: 修改环境变量path增加:

E:\npm\repo_node\npm

初始化新项目

通过运行npm init,你可以为你的项目创建一个package.json文件,这是管理项目依赖的起点。

安装包

要为项目添加一个新包,可以使用npm install <package-name>命令。这不仅会下载包,还会将其添加到你的package.json文件中。

保存了项目依赖的各种包,从git clone下来项目之后,直接使用npm install即可安装所有依赖,不需要把真正的依赖上传。

npm 的未来

npm持续在演进。最新版本带来了更快的性能,更好的安全性和更简洁的用户体验。随着JavaScript生态的不断发展,npm也在不断地扩展其功能以满足日益增长的需求。

npm常用命令

https://www.npmjs.com/

#按package.json中的配置来安装
npm i
#查看当前目录下已安装的第三方包,加-g查看全局的
npm list
#查看某个包在仓库有哪些可用版本
npm view jquery versions
#安装jquery的最新版本,全局安装加-g
npm i jquery
#安装指定版本
npm i jquery@1.11.1

package.json中^~的区别:

  • ^1.11.1:选取范围<2.0.0且>=1.11.1
  • ~1.11.1:安装最新的小版本,1.11.x,选取最大的

package-lock.json

  • 锁定了具体的版本,避免语义版本带来项目bug。
  • 通过命令行操作软件包时此文件会根据package.json的内容自动被npm修改,不要自己修改这个文件。

当package-lock.json和package.json一致时,npm i根据package-lock.json来,否则根据package.json来并同步更新到package-lock.json中

#保存到开发依赖节点(添加--save-dev/-D选项),默认保存到运行时依赖(即默认加了--save/-S)
npm install webpack webpack-cli -D
#清理npm安装的缓存,实际上清理的是你配置的缓存目录(E:\npm\ repo_node\npm_cache)
npm cache clean --force
#删除某个包,删除全局的-g
npm uninstall jquery
#更新某个包到最新版本
npm update jquery
#运行脚本,xXX是你在package.json的scripts标签里面定义的命令,名字随便。
npm run xxx

注意:xxx对应的命令会优先使用局部安装的包,如:

npm install webpack webpack-cli -g
npm install webpack@3.6.0 -D

此时通过webpack-v查看到的是全局的webpack的版本,如何查看本项目依赖的webpack版本呢?

怎么使用

在没结合webpack之前,跟原来一样,从node_modules目录下找即可

结语

npm是每一位JavaScript开发者技能树上的基础。它简化了复杂的依赖管理问题,使得共享以及使用开源代码变得前所未有地容易。正是有了npm这样的工具,我们才能站在巨人的肩膀上进行更为创新和高效的软件开发。

无论你是一个初学者,还是一个经验丰富的工程师,投入时间去深入理解npm都是一项值得的投资。对于未来,npm将继续赋能给那些愿意探索JavaScript世界无限可能的人。


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

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

相关文章

EMQX 性能调优:TCP SYN 队列与 Accept 队列

在上一篇博客&#xff08;EMQX 性能调优&#xff1a;最大连接与文件描述符&#xff09;&#xff0c;我们深入研究了 MQTT 连接与文件描述符之间的关系&#xff0c;介绍了如何修改文件描述符相关的内核参数来突破默认的最大连接数量限制。 但你可能会发现&#xff0c;在某些情况…

9.1斐波那契数(LC509-E)

算法&#xff1a; 动态规划五部曲&#xff1a; 1.确定dp数组及下标含义 dp[i]的定义为&#xff1a;第i个数的斐波那契数值是dp[i] 2.确定递归公式 题目已给出&#xff1a;状态转移方程 dp[i] dp[i - 1] dp[i - 2]; 3.dp数组如何初始化 题目已给 dp[0] 0; dp[1] 1; …

SpringBoot使用Rabbit详解含完整代码

1. 摘要 本文将详细介绍如何在Spring Boot应用程序中集成和使用RabbitMQ消息队列。RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;用于通过轻量级和可靠的消息在应用程序或系统之间进行异步通信。本文将通过步骤说明、代码示例和详细注释&#xff0c;指导读者在Spring…

2023年上-未来几年我要做什么

1月份&#xff0c;离职。 2月份&#xff0c;春节休假回来&#xff0c;中旬去参加了一个月的瑜伽培训&#xff0c;学会了倒立、鹤蝉。。。。 3月份&#xff0c;瑜伽培训结束&#xff0c;开始收拾房子&#xff0c;并调研各类项目。 4月份&#xff0c;参与了朋友的区块链项目 …

web前端开发--------阴影与转换

1.阴影分为文本阴影和盒子阴影 我们使用text-shadow属性为文本添加阴影效果&#xff0c;使用结构伪类为第一个子元素p添加阴影效果&#xff1b; 水平偏移量为负值时&#xff0c;表示阴影向左偏移&#xff1b; &#xfeff;垂直偏移量为负值时&#xff0c;表示阴影向上偏移。 …

【Linux】初始进程地址空间

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 目录 一、再谈fork二、程序地址空间2.1代码验证 三、虚拟地址&am…

Error: Projects must list all files or use an ‘include‘ pattern.

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

【解决方案】在Vue、HTML项目中使用@spacechart/translate 插件实现在线实时翻译、自定义翻译

SpaceChart/Translate SpaceChart/Translate 是一个可配置的翻译插件&#xff0c;适用于任何环境&#xff0c;让开发者不再需要注重插件本身&#xff1b;插件支持自定义翻译引擎&#xff0c;快速生成对应的AI翻译模型客户端插件 Repository GitHubNPM Browser Support La…

计算机图形学 实验

题目要求 1.1 实验一&#xff1a;图元的生成&#xff1a;直线、圆椭区域填充 你需要完成基本的图元生成算法&#xff0c;包括直线和椭圆。 在区域填充中&#xff0c;要求你对一个封闭图形进行填充。你需要绘制一个封 闭图形&#xff08;例如多边形&#xff09;&#xff0c;并选…

计算机网络实验一

目录 实验一 使用PacketTracer组建简单局域网 1、实验目的 2、实验设备 &#xff08;1&#xff09;内容一&#xff08;组建简单局域网&#xff09;&#xff1a; &#xff08;2&#xff09;内容二&#xff08;使用交叉线直连两台机器&#xff09;&#xff1a; &#xff08…

Java知识点总结

数据类型强转&#xff1a;byte short int long float double &#xff1b; 数组定义 [ ]数组名 clone-复制数组equals-比较存储地址 toString sort-排序 length-长度 arraycopy([]a,s,[]b,ss,n)-数组复制 运算符及语句 instanceof双目运算符 –左对象右类 判断是否是该类创建…

【Linux】-多线程的知识都收尾(线程池,封装的线程,单例模式,自旋锁)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

Unity使用反向遮罩实现镂空shader

实现步骤&#xff1a; 1&#xff0c;创建两个材质球&#xff0c;遮罩层的属性如下&#xff1a; 被遮罩层的属性如下&#xff1a; 2&#xff0c;使用两张image&#xff0c;遮罩层在父节点&#xff0c;被遮罩层在子节点&#xff0c;然后分别添加材质球与镂空图片 实现效果如下&a…

无人零售模式下,“IoT+鸿蒙”实现零代码搭建自动售货机监控大屏的可能性摸索

前言 新零售模式下&#xff0c;对loT的探索与应用还在继续。 而数字时代&#xff0c;数字化转型在零售行业中蔓延&#xff0c;而对于新的消费方式的探索&#xff0c;也在如火如荼的进行中。于是&#xff0c;一种新零售的形式——无人零售逐渐形成概念。 如果说&#xff0c;人…

D78XX系列——用于各种电视机、收录机、电子仪器、设备的稳压电源电路,输出电流大,内设过热、短路保护电路,无需外接元件

D78XX系列是用于各种电视机、收录机、电子仪器、设备的稳压电源电路。包括D7805、D7806、 D7808、 D7809、 D7810、 D7812、 D7815。 主要特点&#xff1a; ● 输出电流大&#xff0c;IOMAX 1A. ● 无需外接元件。 ● 内设过热、短路保护电路 ● 封装形式: T0-220

Cmake语法学习2:常用变量

目录 1.常用变量简介 1.1提供信息的变量 1.2改变行为的变量 1.3描述系统的变量 ​编辑1.4控制编译的变量 2.提供信息的变量 2.1PROJECT_SOURCE_DIR 和 PROJECT_BINARY_DIR 2.2 CMAKE_SOURCE_DIR 和 CMAKE_BINARY_DIR 2.3CMAKE_CURRENT_SOURCE_DIR 和CMAKE_CURRENT_BIN…

如何用AI人工智能写作?6个AI写作神器推荐

在日常生活中&#xff0c;我们往往会遇到一些关于写作方面的难题&#xff0c;毕竟传统的写作方式还是会存在一些局限性&#xff0c;幸运的是&#xff0c;随着人工智能技术的不断发展&#xff0c;AI写作已经成为了现实。AI写作神器可以帮助我们提高写作效率&#xff0c;解决写作…

骨传导耳机的技术原理是什么?和传统耳机相比有哪些优点?

骨传导耳机通过人体骨骼来传递声音&#xff0c;可以绕过耳道和耳膜直接传达音频到听者的内耳&#xff0c;开放双耳的佩戴方式可以在享受音乐或通话的同时保持对周围环境的感知&#xff0c;这种设计在户外活动或运动等场景下的使用尤为实用&#xff0c;可以避免堵塞耳朵&#xf…

RK3568驱动指南|驱动基础进阶篇-进阶1 编译进内核的驱动系统是如何运行的?

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Python实现排序算法

目录 一&#xff1a;快速排序 二&#xff1a;合并排序 三&#xff1a;冒泡排序 四&#xff1a;插入排序 五&#xff1a;选择排序 一&#xff1a;快速排序 def quicksort(arr): if len(arr) < 1: return arr pivot arr[len(arr) // 2] le…