全球快资讯丨详解node中的包和包管理工具

时间:2022-11-24 20:57:11       来源:转载
本篇文章带大家深度解析一下node的包和强大的包管理工具,希望对大家有所帮助!

什么是包

包从哪里来的?

不同于 Node.js 中的内置模块自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。 在这里记笔记:免费的!!!


(资料图片)

为什么我们要用包?

包从哪里下载?

国外有一家 IT 公司,叫做npm, Inc. 这家公司旗下有一个超级牛的网站: https://www.npmjs.com ,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包!

怎么下载包

npm, Inc.公司提供了一个包管理工具,我们可以使用这个包管理工具,从 https://registry.npmjs.org 服务器把需要的包下载到本地使用。 这个包管理工具的名字叫做 Node Package Manager(简称 npm 包管理工具),这个包管理工具随着 Node.js 的安装,包一起被安装到了用户的电脑上。

注意 : 我们的npm版本可能不一样,大家不要恐慌

npm初体验

格式化时间moment

代码示例:

const moment = require("moment")const dt = moment().format("YYYY-MM-DD")console.log(dt);  // 2022-09-18
登录后复制

安装包命令

如果你想安装自己需要的包,可以使用以下命令:npm install xxx或者 npm i xxx(这个是简写形式,更加的方便快捷)

安装包后出现的文件

其中:

node_modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。

package-lock.json 配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等

安装指定版本的包

代码示例:

解析包版本的含义(语义化版本规范)

包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,例如 2.24.0其中每一位数字所代表的的含义如下:

第1位数字:大版本(比如:我们所玩的王者荣耀每过几个月都会有大版本更新,那么的化第一位数字就会发生变化,大家下次观察一波)

第2位数字:功能版本(比如:王者荣耀的某个版本添加了新的功能,又叫小更新)

第3位数字:Bug修复版本(比如:修复了闪退的bug,修复了人物模型的失真bug…)

包管理配置文件

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

项目的名称、版本号、描述

项目中都用到了哪些包

哪些包只在开发期间会用到

那些包在开发部署时都需要用到

1. 多人协作问题

剔除方法:.gitignore文件中输入node_modules即可!

2. 如何记录项目中安装了哪些包

项目根目录中,创建一个叫做 package.json的配置文件,即可用来记录项目中安装了哪些包。从而方便剔除node_modules目录之后,在团队成员之间共享项目的源代码。

注意:今后在项目开发中,一定要把 node_modules文件夹,添加到 .gitignore忽略文件中。

3. 快速创建 package.json

npm 包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json这个包管理配置文件:npm init -y

{  "name": "3",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "keywords": [],  "author": "",  "license": "ISC",  "dependencies": {    "art-template": "^4.13.2",    "jquery": "^3.6.1",    "moment": "^2.22.2"  }}
登录后复制

4. dependencies 节点

package.json 文件中,有一个 dependencies节点,专门用来记录您使用 npm install 命令安装了哪些包。例如:我们上面的代码中的"art-template": "^4.13.2","jquery": "^3.6.1","moment": "^2.22.2",说明了我们安装了art-templatejquerymoment这三个包!

5. 一次性安装所有的包

当我们从gitee上拉下来一个项目代码,里面是没有node_modules,这就需要我们自己去安装依赖,需要先把所有的包下载到项目中,才能将项目运行起来。否则项目就不会跑起来!

那我们怎么做才能让项目跑起来呢?别着急,我们只需在终端中运行npm install(npm i)就行了!这里运行这个代码的目的是一次性安装我们需要的所有依赖!

6. 卸载包

可以运行 npm uninstall 命令,来卸载指定的包,比如,我们需要卸载moment包,我们可以执行代码:npm uninstall moment注意:npm uninstall命令执行成功后,会把卸载的包,自动从 package.json 的 dependencies 中移除掉

7. devDependencies 节点

如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies节点中。 与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中

你可以使用如下的命令,将包记录到 devDependencies节点中:

//安装指定的包,并且记录到 devDependencies 节点中npm i 包名 -D// 上部代码是简写形式,下部的代码是完整写法:npm install 包名 --save-dev
登录后复制

解决下包速度慢的问题

1. 为什么包下载速度慢

不难发现,我们在安装包的时候它的速度也太慢了吧?为什么会发生这种情况呢?

因为:在使用 npm 下包的时候,默认从国外的 https://registry.npmjs.org/ 服务器进行下载,此时,网络数据的传输需要经过漫长的海底光缆,因此下包速度会很慢。

2. 淘宝npm镜像服务器

为了解决下载速度慢的问题,淘宝在国内搭建了一个服务器,专门把国外官方服务器上的包同步到国内的服务器,然后在国内提供下包的服务。从而极大的提高了下包的速度。

3. 切换npm的下包镜像源

我们已经知道了淘宝镜像可以帮助我们快速的下载包,那么怎么才能切换到淘宝镜像源呢? 在终端中执行以下三步:

首先查看我们当前的镜像源:npm config get registry

将下包的镜像源切换为淘宝镜像源:npm config set registry=https://registry.npmmirror.com/

查看镜像源是否下载成功 : npm config get registry

4. nrm

nrm安装为全局可用的工具 : npm i nrm -g

查看所有的镜像源 : nrm ls

将下载包的镜像源切换为 taobao 镜像 : nrm use taobao

显示这样的话,就说明我们切换成功啦!

包的分类

使用 npm 包管理工具下载的包,共分为两大类,分别是:1. 项目包2. 全局包

1.项目包

那些被安装到项目的 node_modules目录中的包,都是项目包

项目包又分为两类,分别是:开发依赖包(被记录到 devDependencies节点中的包,只在开发期间会用到)核心依赖包(被记录到 dependencies节点中的包,在开发期间和项目上线之后都会用到)

2.全局包

在执行 npm install命令时,如果提供了 -g参数,则会把包安装为全局包

全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules目录下。

3.将md文件转为html

i5ting_toc是一个可以把 md 文档转为 html 页面的小工具(这个真的是嘎嘎好用,比如,如果我们在网上找学习资源的时候,部分会把笔记记为md文档,我们使用浏览器打开md文档布局特别的难以接受~),使用步骤如下:

# 将 i5ting_toc 安装为全局包npm i -g i5ting_toc# 调用 i5ting_toc ,轻松实现 md 转 html 的功能i5ting_toc -f 要转的md文件路径 -o
登录后复制

规范的包结构

在清楚了包的概念、以及如何下载和使用包之后,接下来,我们深入了解一下包的内部结构

一个规范的包,它的组成结构,必须符合以下 3 点要求

包必须以单独的目录而存在

包的顶级目录下要必须包含 package.json这个包管理配置文件

package.json中必须包含 name,version,main这三个属性,分别代表包的名字、版本号、包的入口

举例:

小结

更多node相关知识,请访问:nodejs 教程!

以上就是详解node中的包和包管理工具的详细内容,更多请关注php中文网其它相关文章!

关键词: 管理工具 配置文件 提供了一个