npm与包

  • 包的概念
    Node.js中的第三方模块又叫做包。
  • 包的来源
    由第三方个人或团队开发出来的,免费提供给所有人使用。
  • 为什么需要包
    由于Node.js内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低。包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率。包和内置模块之间的关系类似于jQuery和浏览器内置API之间的关系。
  • 从哪下载包
    https://www.npmjs.com/,它是全球最大的包共享平台,可以从该网站上搜索到任何你需要的包。
    https://registry.npmjs.org/的服务器对外共享所有的包,可以从该服务器上下载自己所需要的包。
  • 如何下载包
    使用Node Package Manager(简称npm包管理工具),该包管理工具随着Node.js的安装包一起被安装到了用户的电脑上,我们可以使用该工具,从https://registry.npmjs.org/服务器把需要的包下载到本地使用。

npm初体验

  • 格式化时间的传统做法

    • 创建格式化时间的自定义模块
    • 定义格式化时间的方法
    • 创建补零函数
    • 从 自定义模块中导出格式化时间的函数
    • 导入格式化时间的自定义模块
    • 调用格式化时间的函数
  • 格式化时间的高级做法

    • 使用npm包管理工具,在项目中安装格式化时间的包moment
    • 使用require()导入格式化时间的包
    • 参考moment的官方API文档对时间进行格式化

    首先在vscode终端输入npm install moment命令安装包,也可以简写成npm i moment,更推荐后者,后者更简洁。如下

    在首次安装包完成之后,项目文件夹会多出一个叫node_modules的文件夹和package.jsonpackage-lock.json两个配置文件,node_modules文件夹用来存放所有已安装到项目中的包,require()导入第三方包时就从 这个目录中 查找并加载包,package.json用于记录项目的基本信息和依赖关系,当npm install命令安装包的时候,npm包管理工具会自动把包的名称和版本号记录到该文件中,打开package.json配置文件,如下
    然后是package-lock.json文件,他是在安装依赖包时自动生成的,package-lock.json配置文件 用来记录node_modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。,主要作用是确保在不同环境中安装相同的依赖包版本,从而避免因为依赖包版本不一致导致的问题。当别人在克隆你的项目并运行npm install时,该文件会确保他们安装与原始项目相同的依赖包版本。如下
    注意奥:不要手动修改node_modules或package-lock.json配置文件中的任何代码,npm包管理工具会自动维护它。
    那下载完包如何使用?就要用到我们之前说的搜索网站https://www.npmjs.com/,进入该网站输入包的名称就可以找到该用法了,例如我们这里的moment,输入名称后点击对应的包,然后点击Documentation,如下
    点击出现该官网文档,往下滑即可找到对应的用法,如下
    知道该怎么使用之后我们就可以调用包里面的方法啦,如下,简单多了是吧

  • 安装指定版本的包
    默认情况下,使用npm install 命令安装包的时候,会自动安装最新版本的包,如果需要安装指定版本的包,可以在包名之后,通过@符号指定具体的版本,例如npm i moment@2.22.2

  • 包的语义化版本规范
    包的版本号是以”点分十进制“形式进行定义的,总共有三位数字,例如2.24.0,第一位数字代表大版本(当底层重构的时候大版本加一),第二位数字代表功能版本(当添加新功能时,功能版本加一),第三位表示bug修复版本(当对bug进行修复以后,bug版本加一)
    提升规则:只要前面的版本号增长了,则后面的版本号归零。例如当大版本更新,则功能版本和bug修复版本都要归零。

包管理配置文件

npm规定,在项目根目录中,必须提供一个叫做package.json的包管理配置文件,用来记录i与项目有关的一些配置信息。例如:

  • 项目的名称、版本号、描述等
  • 项目中都用到了哪些包
  • 哪些包只在开发期间会用到
  • 哪些包在开发和部署时都需要用到
    注:今后在项目开发中,一定要把node_modules文件夹添加到.gitignore 忽略文件中,有以下好处:
    • 减少仓库大小:node_modules文件夹通常包含了大量的依赖包文件,这些文件数量庞大,会显著增加Git仓库的大小。如果提交到版本控制系统,会导致克隆和拉取仓库时消耗更多的时间和磁盘空间。
    • 避免不必要的冲突:不同的开发人员可能使用不同版本的Node.js和npm,这可能导致在不同开发者环境中安装的依赖包版本不一致。将这些依赖包纳入版本控制可能会引发合并冲突,增加项目管理的复杂性。
    • 环境隔离:将node_modules文件夹排除在版本控制之外,可以确保每个开发者和部署环境都有一套独立的依赖包,这样可以避免因共享同一个部署文件系统而产生的风险。
    • 依赖包管理:node_modules文件夹可以看作是项目所依赖的外部模块的缓存,它们可以通过npm install命令自动下载和管理。因此,不需要将这些依赖包手动提交到版本控制系统中。
    • 安全性:某些依赖包可能包含敏感信息或者配置数据,例如API密钥等,这些信息不应该被提交到公共的版本控制系统中。通过忽略node_modules文件夹,可以减少泄露风险。
    • 简化部署:在部署阶段,通常需要根据生产环境的具体需求安装特定版本的依赖包。如果node_modules文件夹被提交到版本控制中,可能会干扰自动化部署流程。
  • 快速创建package.json配置文件,使用npm init -y命令,该命令只能在英文的目录下成功运行,不能使用中文和空格。PS:但现在安装包的时候已经能自动创建该配置文件了,不过只包含了包的名称和版本信息,如之前的图片一样,当我们在终端输入该命令,再打开该文件可看到显示如下
  • 一次性安装所有的包
    当我们拿到一个剔除了node_modules的项目之后,需要先把所有的包下载到项目中,才能将项目运行起来,否则会报错。可以运行npm i npm install一次性安装所有的依赖包。
  • 卸载包
    运行npm uninstall 包的名称命令来卸载指定的包
    注意:该命令执行成功后,会把卸载的包自动从package.json的dependencies中移除掉。
  • devDependencies节点
    如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies节点中。
    如果某些包再开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。
    可以使用以下命令将包记录到devDependencies节点中,npm i 包名 -D完整名称是npm install 包名 --save-dev,表示 安装指定的包并记录到dependencies节点中。
    那如何判断安装该包是否需要加入到dependencies节点中呢?很简单,还是那个搜索网站https://www.npmjs.com/,例如这里我们搜索webpack包,打开它,看见其安装教程如下,表示它需要加到该节点中,包名和-D的顺序不重要,前后都可,当该命令运行成功后,package.json配置文件会多dependencies节点,记录该包的名称和版本,该包不会被加入到dependencies

解决下包速度慢的问题

  • 为什么下包速度慢
    因为npm下包的时候默认从国外的https://registry.npmjs.org服务器进行下载,此时,网络数据的传输需要经过漫长的海底光缆,因此下包速度很慢呢。
  • 如何解决呢
    • 淘宝NPM镜像服务器
      淘宝在国内搭建了一个服务器,专门把国外官方服务器上的包同步到国内的服务器,然后在国内提供下包的服务,从而极大提高了下包的速度。
      镜像:是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
  • 如何切换npm的下包镜像源
    下包的镜像源指的就是下包的服务器地址。
    • 查看当前的下包镜像源
      npm config get registry
    • 将下包的镜像源切换为淘宝的镜像源
      npm config set registry=https://registry.npmmirror.com/
    • 检查镜像源是否下载成功
      npm config get registry
  • nrm
    为了更方便的切换下包的镜像源,可以安装nrm小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源。
    • 通过npm包管理器,将nrm安装为全局可用的工具
      npm i nrm -g
    • 查看所有可用的镜像源
      nrm ls
    • 将下载的镜像源切换为taobao镜像
      nrm use taobao

包的分类

  • 项目包
    那些被安装到项目的node_modules目录中的包都是项目包。
    项目包有分两类(前面讲过分别如何下载的哈),分别是:
    • 开发依赖包:被记录到devDependencies节点中的包,只在开发期间会用到
    • 核心依赖包:被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到
  • 全局包
    在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包。
    npm i 包名 -g全局安装指定的包
    npm uninstall 包名 -g卸载全局安装的包
    全局包默认会被安装到C:\Users\用户目录\AppData\Roaming\npm\node_modules目录下,那可能根据自己的电脑不同会稍有差别,例如我的全局包是安装在D:\Node.js\node_global\node_modules,因为我安装时修改了路径,在该目录下我可以查看到我刚刚下载的全局包nrm,如下
    注意:
    • 只有工具性质的包,才有全局安装的必要性。因为他们提供了好用的终端命令。
    • 判断某个包是否需要全局安装后才能使用,参考官方提供的说明即可。就是上面提到的搜索网站,查看该包官方文档即可。
  • i5ting_toc
    i5ting_toc是一个可以把md文档转为html页面的小工具,使用步骤如下:
    • 将i5ting_toc安装为全局包
      npm install -g i5ting_toc
    • 调用i5ting_toc,轻松实现md转html的功能
      i5ting_toc -f 要转换的md文件路径 -o
    • 可以在该md文件目录下右击打开终端,先安装该包,然后执行该命令即可

规范的包结构

  • 一个规范的包,他的组成结构必须符合以下三点要求:
    - 包必须以单独的目录而存在
    - 包的顶级目录下要必须包含package.json这个包管理配置文件
    - package.json中必须包含name,version,main这三个属性,分别代码 包的名字、版本号和包的入口。
  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值