【Nodejs】npm的使用

news2024/12/25 9:38:52

在这里插入图片描述

1.包和npm


1.1 什么是包

由于 Node 是一套轻内核的平台,虽然提供了一系列的内置模块,但是不足以满足开发者的需求,于是乎出现了包(package)的概念: 与核心模块类似,就是将一些预先设计好的功能或者说 API 封装到一个文件夹,提供给开发者使用。

Node 本身并没有太多的功能性 API,所以市面上涌现出大量的第三方人员开发出来的Package。

1.2 包的加载机制

Node.js中使用CommonJs模块化机制,通过npm下载的第三方包,我们在项目中引入第三方包都是:let xx = require(‘第三方包名’),究竟require方法加载第三方包的原理机制是什么,今天我们来探讨下。

(1)require(‘第三方包名’)优先在加载该包的模块的同级目录node_modules中查找第三方包。
(2)找到该第三方包中的package.json文件,并且找到里面的main属性对应的入口模块,该入口模块即为加载的第三方模块。
(3)如果在要加载的第三方包中没有找到package.json文件或者是package.json文件中没有main属性,则默认加载第三方包中的index.js文件。
(4)如果在加载第三方模块的文件的同级目录没有找到node_modules文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找node_modules文件夹,查找规则如上一致。
(5)如果一直找到该模块的磁盘根路径都没有找到,则会报错:can not find module xxx。
比如说:

requiere(`fs`);

那加载的肯定是系统的包。所以,我们尽量不要创建一些和现有的包重名的包。

1.3 npm 的概念

NPM:Node Package Manager。

Node.js 发展到现在,已经形成了一个非常庞大的生态圈。包的生态圈一旦繁荣起来,就必须有工具去来管理这些包。NPM 应运而生。

举个例子,当我们在使用 Java 语言做开发时,需要用到 JDK 提供的内置库,以及第三方库。同样,在使用 JS 做开发时,我们可以使用 NPM 包管理器,方便地使用成熟的、优秀的第三方框架,融合到我们自己的项目中,极大地加速日常开发的构建过程。

随着时间的发展,NPM 出现了两层概念:

  • 一层含义是 Node 的开放式模块登记和管理系统,亦可以说是一个生态圈,一个社区。
  • 另一层含义是 Node 默认的模块管理器,是一个命令行下的软件,用来安装和管理 Node 模块。

1.4 npm 的安装(不需要单独安装)

NPM 不需要单独安装。默认在安装 Node 的时候,会连带一起安装 NPM

NVM、Node、NPM 安装之后,目录分布如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输入 npm -v,查看 npm 的版本

如果上方命令无效,可能是之前的 node 并没有完全安装成功,解决办法。另外,Node 附带的 NPM 可能不是最新版本,可以用下面的命令,更新到最新版本:

$ npm install npm -g

1.5 配置 NPM 的全局目录
NPM 默认安装到当前正在使用 Node 版本所在目录下。我们建议重新配置 NPM 的全局目录。

输入npm config ls,查看npm 配置、换源、换储存库配置

2.NPM 的常用命令


查看 npm 当前版本:

npm -v

更新 npm:

npm install npm@latest -g

项目初始化:(执行完成后,会生成package.json文件)

npm init

# 快速跳过问答式界面,选择默认配置
npm init --yes

只在当前工程下安装指定的包:

npm install [package]

在全局安装指定的包:

npm install -g [package]

安装的包只用于开发环境,不用于生产环境:(会出现在 package.json 文件中的 devDependencies 属性中)

npm install [package] --save-dev
# 或者
npm install [package] -D

安装的包需要发布到生产环境:(会出现在 package.json 文件中的 dependencies 属性中)

npm install [package] --save
# 或者
npm install [package] -S

查看当前目录下已安装的 node 包:

npm list

查看全局已经安装的 node 包:

npm list -g

查看 npm 帮助命令:

npm --help

查看指定命令的帮助:

npm [指定命令] --help

更新指定的包:

npm update [package]

卸载指定的包:

npm uninstall [package]

查看配置信息:

npm config list

查看本地安装的指定包的信息,没有则显示 empty:

npm ls [package]

查看全局安装的指定包的信息,没有则显示 empty:

npm ls [package] -g

查看远程 npm 上指定包的所有版本信息:

npm info [package] versions

查看当前包的安装路径:

npm root

查看全局包的安装路径:

npm root -g

3.配置 npm 镜像源


由于 npm 默认的下载地址在国外(npmjs.com),有时候会被墙,导致无法下载或者下载很慢。因此,我们可以尝试切换成,从其他的镜像源下载 npm 包。

切换镜像源,有下面这几种方式:

  • 方式 1:临时切换镜像源。
  • 方式 2:切换镜像源
  • 方式 3:通过 NRM 切换镜像源(最为推荐的方式)。
  • 方式 4:cnpm。

3.1 方式 1:临时切换镜像源

安装指定包的时候,通过追加 --registry参数即可。格式如下:

# 格式
npm install [package] --registry [https://xxx]
# 举例:在下载安装 express 这个包的时候,临时指定镜像源为 https://registry.npm.taobao.org
npm install express --registry https://registry.npmmirror.com/

3.2 方式 2:切换镜像源

npm config set registry https://registry.npmmirror.com/

执行上述命令后,以后下载所有 npm 包的时候,都会改为使用淘宝的镜像源。

3.3 方式 3:通过 NRM 切换镜像源(推荐)

NRM:Node Registry Manager。作用是:切换和管理 npm 包的镜像源。

  • 项目地址:https://www.npmjs.com/package/nrm
  • GitHub 地址: https://github.com/Pana/nrm

安装 NRM:

npm install -g nrm

执行命令nrm ls查看可选的源。

npm ---------- https://registry.npmjs.org/
yarn --------- https://registry.yarnpkg.com/
tencent ------ https://mirrors.cloud.tencent.com/npm/
cnpm --------- https://r.cnpmjs.org/
taobao ------- https://registry.npmmirror.com/
npmMirror ---- https://skimdb.npmjs.com/registry/

切换
如果要切换到taobao源,执行命令nrm use taobao

增加
你可以增加定制的源,特别适用于添加企业内部的私有源,执行命令nrm add <registry> <url>,其中reigstry为源名,url为源的路径。

nrm add registry http://registry.npm.frp.trmap.cn/

删除
执行命令nrm del <registry>删除对应的源。

测试速度
你还可以通过nrm test测试相应源的响应时间。

nrm test npm

3.4 方式 4:安装 cnpm

项目地址:npmmirror 中国镜像站
安装cnpm替换 npm(npm 由于源服务器在国外,下载包的速度较慢,cnpm 会使用国内镜像):

$ npm install -g cnpm --registry=https://registry.npmmirror.com

以后我们就可以通过 cnpm 命令去安装一个包。举例如下:

# 安装 vue 这个包
cnpm install vue

这里的单词 install 可以简写成 i。

4.什么是 npm 脚本


npm 允许在package.json文件里面,使用scripts字段定义脚本命令。
package.json 里面的scripts 字段是一个对象。
它的每一个属性,对应一段脚本。
定义在package.json里面的脚本,就称为 npm 脚本。

查看当前项目的所有 npm 脚本命令,可以使用不带任何参数的npm run命令。

4.1 使用

npm run 脚本名称
如果是并行执行(即同时的平行执行),可以使用&符号。 npm run script1.js & npm run script2.js
如果是继发执行(即只有前一个任务成功,才执行下一个任务),可以使用&&符号。npm run script1.js && npm run script2.js

4.2 简写形式

npm start 即 npm run start
npm stop 即 npm run stop
npm test 即 npm run test
npm restart 即 npm run stop && npm run restart && npm run start

5.pnpm


5.1 pnpm 是什么

pnpm是 Node.js 的替代包管理器。它是 npm 的直接替代品,但速度更快、效率更高。为什么效率更高?当您安装软件包时,我们会将其保存在您机器上的全局存储中,然后我们会从中创建一个硬链接,而不是进行复制。对于模块的每个版本,磁盘上只保留一个副本。例如,当使用 npm 或 yarn 时,如果您有 100 个使用 lodash 的包,则磁盘上将有 100 个 lodash 副本。pnpm 可让您节省数 GB 的磁盘空间!

pnpm优势 pnpm 拥有 Yarn 超过 npm 的所有附加功能:

  • 安全: 与 yarn 一样,pnpm 有一个包含所有已安装包校验和的特殊文件,用于在执行代码之前验证每个已安装包的完整性。
  • 离线模式: pnpm 将所有下载的包 tarball 保存在本地注册表镜像中。当包在本地可用时,它从不发出请求。使用该–offline参数可以完全禁止 HTTP 请求。
  • 速度: pnpm 不仅比 npm 快,而且比 yarn 快。无论是冷缓存还是热缓存,它都比 yarn 快。yarn 从缓存中复制文件,而 pnpm 只是从全局存储中链接它们。

5.2 pnpm 的使用

官网: https://pnpm.js.org/installation/

全局安装

npm install pnpm -g

设置源

//查看源
pnpm config get registry 
//切换淘宝源
pnpm config set registry https://registry.npmmirror.com/

使用

//可以和npm一样使用方式
pnpm init //直接初始化
pnpm install 包  // 
pnpm i 包
pnpm add 包    // -S  默认写入dependencies
pnpm add -D    // -D devDependencies
pnpm add -g    // 全局安装

移除

pnpm remove(uninstall) 包                            //移除包
pnpm remove 包 --global                   //移除全局包

更新

pnpm up                //更新所有依赖项
pnpm upgrade 包        //更新包
pnpm upgrade 包 --global   //更新全局包
pnpm up --latest //最新更新所有依赖项,忽略package.json中指定的范围

6.npm命令总结


(1)npm init -y 添加初始化文件记录安装信息,如果在后面加-S或者-D会自动创建该文件

(2)npm install 包名 –g (uninstall,update)

(3)npm install 包名 --save(-S) --dev(-D) (uninstall,update),如果不写后缀默认是安装到生产环境;如果先装到了开发环境,那么后面覆盖安装不写后缀也是本身的环境下;一个包只能存在在一种环境,得先卸载才能换环境

(4)npm list -g (不加-g,列举当前目录下的安装包)

(5)npm info 包名(详细信息) npm info 包名 version (获取最新版本)

(6)npm install md5@1.8.0(安装指定版本)

(7)npm outdated(检查包是否已经过时),如果版本比较新就不会有输出

(8)pwd输出当前目录的绝对路径

(9)npm view 包名 version查看当前版本 npm view 包名 versions查看该包所有版本

(10)npm update 包名 更新指定包 npm update 更新所有的包(pnpm up)

(11)npm config list 查看npm配置信息

(12)npm 指定命令 --help 查看指定命令的帮助。

(13)npm root:查看当前包的安装路径。 npm root -g:查看全局的包的安装路径。

(14)npm ls 包名:查看本地安装的指定包及版本信息,没有显示empty。 npm ls 包名 -g:查看全局安装的指定包及版本信息

(15)npm cache clean --force 清除缓存

(16)npm -v查看npm的版本

"dependencies": {    "md5": "^2.1.0"  }  ^ 表示 如果 直接npm install 将会 安md5@2.*.*  	最新版本

"dependencies": {    "md5": "~2.1.0"  }  ~ 表示 如果 直接npm install 将会 安装md5 2.1.*  最新版本

"dependencies": {    "md5": "*"  }  * 表示 如果 直接npm install 将会 安装 md5  最新版本

7.使用 nodemon 自动重启服务


我们在开发的过程中,每次改完代码之后都必须重启服务器,显然这样的操作效率是比较低,这里给大家推荐个工具,nodemon,nodemon可以帮我们实时监听项目中代码的变化,并且自动重启服务,而且配置简单。

(1)安装:npm install -g nodemon

如果无法使用nodemon,那么要去环境变量中进行配置

(2)使用nodemon运行项目,取代之前的node app.js。

nodemon  app.js

项目运行之后,nodemon会自动监听代码的改动,并且重新启动服务,大大增加我们开发效率。

(3)nodemon常见配置

  • 在命令行指定应用的端口号:nodemon ./server.js localhost 8080
  • 查看帮助,帮助里面有很多选项都是一目了然:nodemon -h 或者 nodemon --help
  • 运行 debug 模式:nodemon --debug ./server.js 80
  • 手动重启项目: Nodemon命令运行的终端 窗口中输入 rs 两个字符,然后再按下回车键,就能手动重启 Nodemon了。

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

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

相关文章

20.0 HTTP通信

1. web开发 1.1 web开发介绍 Web指的是World Wide Web(万维网), 是一种基于互联网的信息系统. 万维网由一系列通过超文本链接相互连接的页面组成, 这些页面中包含了文本, 图像, 音频, 视频等多媒体内容. 用户可以通过浏览器访问万维网上的网页, 并通过超链接在不同页面之间导…

网页布局元素填充思路 ———— 先布局,再局部

【引言】 今天来分享一下在JS练习项目中学习到的网页布局思路&#xff0c;适合刚接触JS的小白在做练习项目&#xff0c;不知所措的时候看喔~ 简单来说就是 ———— 先布局&#xff0c;再局部。 在初次做练习项目的时候&#xff0c;大多都会先仿照一个网站先进行一个试练&…

商城后台系统的多规格

需要添加多规格,并且还要根据算法生成对应的规格列表 1、获取此规格值数据类型 specsList:[{title: "颜色",specsTag:[蓝色,绿色],},{title: "尺码",specsTag:[165*130,L,XL], }] 2、处理数据 let skuList = []for(const { specsTag } of this.specsLi…

StableDiffusion 换脸实现

先看效果&#xff1a; 想要换的脸&#xff1a; 想要把脸放到的目标图片&#xff1a; 实现方案&#xff1a; StableDiffusionroop&#xff08;本次实验基于roopV0.02版本&#xff09; 1/安装SD&#xff0c;模型选择 DreamShaper,Sampler使用 Euler a 2/安装roop插件 roop插…

adnroid 11. 0 Activity启动流程图解

从Launcher到ActivityTaskManager 从ActivityTaskManagerService 到 ApplicationThread 从ApplicationThread到onCreate

CSS实现文字渐变色

css样式 style"background: linear-gradient(to right, red, #FFA387);-webkit-background-clip: text;color: transparent;"效果

结构型设计模式-1.代理设计模式

结构型设计模式-1.代理设计模式 结构型设计模式&#xff1a;利用类与类之间的关系&#xff08;继承、组合&#xff09;&#xff0c;形成一种类与类之间的结构&#xff0c;通过这种结构提高代码的可拓展性、可维护性和可重用性。 一、简介 代理设计模式&#xff08;Proxy Des…

从零开始制作婚礼策划展示小程序

随着移动互联网的发展&#xff0c;小程序已经成为各行各业展示和推广自己的重要工具之一。对于婚礼策划行业来说&#xff0c;制作一个专属的婚礼策划展示小程序&#xff0c;不仅能提升服务的专业性和便利性&#xff0c;还能吸引更多的客户。下面将介绍从零开始制作婚礼策划展示…

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(系统底层优化篇)

深入探索和分析MySQL数据库的全方位的优化实战开发指南&#xff08;数据库底层优化篇&#xff09; 硬件层面优化数据库物理机分析底层技术优化磁盘性能优化随机IO能力的能力支持 RAID磁盘阵列RAID10RAID10的优势 网卡优化网络设备坑点问题建议 服务器硬件配置调整服务器BIOS调整…

Layout软件中的焊盘的一般命名方法是什么呢?

答&#xff1a;对于不同的焊盘有不同命名方法&#xff0c;这里给大家介绍一下普遍的命名方法&#xff0c;具体如下所示&#xff1a; 贴片类焊盘命名方式&#xff1a; 1&#xff09;圆焊盘circle &#xff1a;SC 直径&#xff0c;如&#xff1a; SC1R00&#xff0c;即直径为1m…

多种语言示例采集数据【淘宝天猫1688拼多多API系列】可高并发线程

长话短说&#xff0c;节约彼此宝贵时间&#xff0c;我们以淘宝商品详情数据为例&#xff1a; 请求方式&#xff1a;HTTPS POST GET 请求地址&#xff1a;https://o0b.cn/anzexi taobao.item_get 公共参数 名称类型必须描述技术交流18179014480keyString是调用key&#xf…

探寻智能化未来:AI与Web3共创金融领域巨大潜力

人工智能&#xff08;AI&#xff09;和Web3技术的迅猛发展为我们带来了许多新的机遇和影响。在数字经济和社会的浪潮中&#xff0c;结合了AI的智能化能力和Web3的去中心化与区块链技术&#xff0c;我们将进入一个智能化的Web3时代。人工智能和Web3技术是开拓生产力极限和重新定…

Docker 数据管理

Docker 数据管理 一、docker数据管理 1.数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现数据在宿主机与容器之间的迁移。…

QT构建套件(Kit)黄色感叹号问题解决

构建套件&#xff08;Kit&#xff09;黄色感叹号问题 1:看下面的图出现了黄色警告&#xff0c;此时这个构建套件 就是不允许使用的 2&#xff1a;查看一下MSVC的dedbug调试器(cdb.exe) 如果没有&#xff0c;我们需要下载cdb.exe cdb.exe下载方法 2.1首先我们可以打开我们系…

【Linux】- 进程管理

进程管理 1.1 基本介绍1.2 显示系统执行的进程1.3 服务(service)管理2.1 chkconfig 指令2.2 动态监控进程2.3 监控网络状态 1.1 基本介绍 在 LINUX 中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个 ID 号(pid,进程号)。>windows > linux每个进程都可…

哪种电容笔比较好用?一般电容笔和Apple pencil区别

和苹果的Pencil不同的是&#xff0c;一般的电容笔并没有具备重力压感&#xff0c;只有一种倾斜的压感。如果你是一个不常用于绘画的用户&#xff0c;那么可以使用一支价格相对实惠的平替电容笔。这款电容笔&#xff0c;既能用在办公中&#xff0c;又能用来做笔记&#xff0c;还…

勘探开发人工智能技术:地震层位解释

1 地震层位解释 层位解释是地震构造解释的重要内容&#xff0c;是根据目标层位的地震反射特征如振幅、相位、形态、连续性、特征组合等信息在地震数据体上进行追踪解释获得地震层位数据的方法。 1.1 地震信号、层位与断层 图1.1 所示为地震信号采集的过程&#xff0c;地面炮…

spring复习:(54)注解配置和xml配置时在bean实例化时的区别

一、使用配置文件定义bean时&#xff0c;会调用无参的构造方法&#xff1a; 而使用ConfigurationBean注解时&#xff0c;在bean定义解析时设置了 factoryBeanName和factoryMethodName 实例化bean时会走如下逻辑&#xff1a; instantiateUsingFactoryMethod方法代码如下&…

怎么学习JavaWeb开发? - 易智编译EaseEditing

学习JavaWeb开发可以按照以下步骤进行&#xff1a; 掌握Java基础&#xff1a; 在学习JavaWeb开发之前&#xff0c;确保你对Java编程语言有一定的掌握&#xff0c;包括面向对象编程、基本语法、数据类型、流程控制等。 学习HTML、CSS和JavaScript&#xff1a; JavaWeb开发主要…

Thanos工作原理及组件简介

Thanos 简介 Thanos 是一个「开源的&#xff0c;高可用的 Prometheus 系统&#xff0c;具有长期存储能力」。很多知名公司都在使用 Thanos&#xff0c;也是 CNCF 孵化项目的一部分。 Thanos 的一个主要特点就是通过使用对象存储&#xff08;比如 S3&#xff09;可以允许 “无…