03_nodjs_npm的使用

news2024/11/17 19:37:27

03 【npm的使用】

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。官方链接: https://www.npmjs.com/

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

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

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

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

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

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

NVM、Node、NPM 安装之后,目录分布如下:

image-20221102143348894

image-20221102143357922

image-20221102143410471

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

如果上方命令无效,可能是之前的 node 并没有完全安装成功。解决办法:https://segmentfault.com/a/1190000011114680

另外,Node 附带的 NPM 可能不是最新版本,可以用下面的命令,更新到最新版本:

$ npm install npm -g

1.5 配置 NPM 的全局目录

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

输入npm config ls,查看

https://blog.csdn.net/smalCat/article/details/79505441

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/
  1. 切换

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

  1. 增加

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

nrm add registry http://registry.npm.frp.trmap.cn/
  1. 删除

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

  1. 测试速度

你还可以通过 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 startnpm run start
  • npm stopnpm run stop
  • npm testnpm run test
  • npm restartnpm 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会自动监听代码的改动,并且重新启动服务,大大增加我们开发效率。

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

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

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

相关文章

[学习笔记]斜率优化dp 总结

前言&#xff1a; 我们学过不少优化类的算法了&#xff0c;大部分都是基于凸函数的性质给出的优化&#xff0c;比如Slope Trick&#xff0c;Wqs二分&#xff0c;又比如今天的斜率优化&#xff08;不知道什么时候会有空把Slope Trick写掉&#xff09; 正文&#xff1a; 我们考…

这个在线网站让你三分钟制作出一份精美简历

今天&#xff0c;我要向大家推荐一个神奇的在线工具网站&#xff0c;它能够提供免费简历模板、简历范文&#xff0c;支持在线编辑&#xff0c;并且一键下载为PDF。这个工具让你的简历制作变得轻松便捷&#xff01; 首先&#xff0c;这个网站的简历模板非常丰富多样。无论你是刚…

bazel构建原理

调度模型 传统构建系统有很多是基于任务的&#xff0c;例如 Ant&#xff0c;Maven&#xff0c;Gradle。用户可以自定义"任务"(Task&#xff09;&#xff0c;例如执行一段 shell 脚本。用户配置它们的依赖关系&#xff0c;构建系统则按照顺序调度。 基于 Task 的调度…

揭秘亚马逊Amazon测评,掌握细节和技巧,提升产品销量和评论数量

亚马逊是全球最大的跨境电商平台&#xff0c;拥有全球65个国家的几十个网站。对于跨境卖家来说&#xff0c;亚马逊是最值得选择的平台之一。 亚马逊的八大站点分别是美国、加拿大、墨西哥、欧洲、澳大利亚、日本、中东和巴西。 美国站点是全球最大的零售市场&#xff0c;拥有…

区块链实验室(18) - 用FISCO BCOS架设1个无标度网络

FISCO技术文档提供1个4节点的网络案例&#xff0c;这4个节点构成1个强连通图。强连通图在现实中通常是不存在的。 本文用FISCO架设1个网络&#xff0c;该网络由100个节点构成1个无标度(scale free)网络&#xff0c;如下图所示。 1 用FISCO工具构建1个100节点的初始网络 FISCO提…

Jenkins java8安装版本安装

一、首先准备Jenkins、Jdk8、Tomcat9安装包 根据Jenkins官网介绍&#xff0c;Jenkins支持Java8的版本如下&#xff1a; 我们选择2.164版本进行安装&#xff0c;根据版本号支持输入下载地址&#xff1a;https://archives.jenkins.io/war/2.164/jenkins.war&#xff0c;进行下载…

【牛客网题目】合并两个排序的链表

目录 描述 题目分析 描述 输入两个递增的链表&#xff0c;单个链表的长度为n&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围&#xff1a;0≤n≤1000&#xff0c;1000≤节点值≤1000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂…

为什么我说 90% 的技术人搞副业都会失败?!

见字如面&#xff0c;我是军哥&#xff01; 这几天有多位程序员读者请教我&#xff0c;如何搞副业&#xff1f;并且有一位已经搞了半年了&#xff0c;涨粉困难&#xff0c;这小伙子大概工作 2 年的样子&#xff0c;所在的公司算中等二线大厂吧。 我把和他们聊的内容总结了一下&…

vscode调教配置:快捷修复和格式化代码

配置vscode快捷键&#xff0c;让你像使用idea一样使用vscode&#xff0c;我们最常用的两个功能就是格式化代码和快捷修复&#xff0c;所以这里修改一下快捷修复和格式化代码的快捷键。 在设置中&#xff0c;找到快捷键配置&#xff1a; 然后搜索&#xff1a;快捷修复 在快捷键…

分库分表篇-1 分库分表介绍

文章目录 前言一、为什么要分库分表&#xff1f;二、分库分表的策略&#xff1a;2.1 垂直切分&#xff1a;2.2.1 垂直分库&#xff1a;2.2.2 垂直分表&#xff1a;2.2.3 垂直拆分的优缺点: 2.2 水平切分&#xff1a;2.2.1 库内分表:2.2.2 分库分表:2.2.3 水平切分优缺点: 三、分…

04-MySQL02

1、什么是索引下推&#xff1f; 索引下推&#xff08;index condition pushdown &#xff09;简称ICP&#xff0c;在Mysql5.6的版本上推出&#xff0c;用于优化查询。 需求: 查询users表中 "名字第一个字是张&#xff0c;年龄为10岁的所有记录"。 SELECT * FROM u…

无涯教程-JavaScript - FTEST函数

FTEST函数取代了Excel 2010中的F.TEST函数。 描述 该函数返回F检验的输出。 F检验返回两尾概率,即array1和array2的方差没有显着差异。使用此功能可以确定两个样本是否具有不同的方差。 语法 FTEST (array1, array2)争论 Argument描述Required/OptionalArray1The first ar…

【仿写spring之ioc篇】三、检查是否实现了Aware接口并且执行对应的方法

Aware接口 Aware接口中只是设置了对应的set方法&#xff0c;目前只定义了三个Aware 以BeanNameAware为例 package com.ez4sterben.spring.ioc.factory.aware;/*** bean名字清楚** author ez4sterben* date 2023/08/31*/ public interface BeanNameAware {/*** 设置beanName* …

老胡的周刊(第106期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 quivr[2] Quivr 是您在云中的第二个大脑&…

Mysql数据库事务隔离级别造成死锁

场景:如下代码,获取数据库连接,删除权限的时候,会造成数据库死锁. 代码 日志&#xff1a; 数据库&#xff1a; SHOW OPEN TABLES where In_use > 0; 问题分析&#xff1a;测试环境Centos7操作系统&#xff0c;Mysql5.7.40版本程序运行正常&#xff0c;开发环境Windows操…

设计模式行为型-模板模式

文章目录 一&#xff1a;模板方法设计模式概述1.1 简介1.2 定义和目的1.3 关键特点1.4 适用场景 二&#xff1a;模板方法设计模式基本原理2.1 抽象类2.1.1 定义和作用2.1.2 模板方法2.1.3 具体方法 2.2 具体类2.2.1 定义和作用2.2.2 实现抽象类中的抽象方法2.2.3 覆盖钩子方法 …

学生信息管理系统MIS(前端)

改造HTML文件 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>学生信息管理系统MIS</title><!-- link在HTML文件中,引入外部的css文件 rel的值是固定写法,stylesheet样式表href用来指定样式表的位置--><lin…

CleanMyMac X2024软件最新版本更新下载

CleanMyMac X是一款颇受欢迎的专业清理软件&#xff0c;拥有十多项强大的功能&#xff0c;可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等&#xff0c;并且这款清理软件操作简易&#xff0c;非常好上手&#xff0c;特别适用于那些刚入手苹…

企业架构LNMP学习笔记5

Nginx&#xff1a; 常见用法&#xff1a; 1&#xff09;web服务器软件 httpd http协议 同类的web服务器软件&#xff1a;apache Nginx&#xff08;俄罗斯&#xff09;IIS&#xff08;微软&#xff09;lighttpd&#xff08;德国&#xff09; 2&#xff09;代理服务器 反向代…

springboot:时间格式化的5种方法(解决后端传给前端的时间格式转换问题)推荐使用第4和第5种!

本文转载自&#xff1a;springboot&#xff1a;时间格式化的5种方法&#xff08;解决后端传给前端的时间显示不一致&#xff09;_为什么前端格式化日期了后端还要格式化_洛泞的博客-CSDN博客 时间问题演示 为了方便演示&#xff0c;我写了一个简单 Spring Boot 项目&#xff…