速记 Node.js 中的 npm 与包

Node.js 中的第三方模块又叫做包,不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。

由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块的项目开发时效率很低。包是基于内置模块封装出来的,提供了更高级、方便的 API,极大的提高了开发效率。

npm,Inc. 旗下有一个非常著名的网站 npmjs,它是全球最球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包;npm,Inc. 公司还提供了一个地址为 registry.npmjs.org 的服务器,来对外共享所有的包,我们可以从这个服务器上下载自己所需要的包。

该公司提供了一个 npm 包管理工具 ( Node Package Manager ),我们可以使用这个包管理工具,从 registry.npmjs.org 服务器把需要的包下载到本地使用。

在终端中执行 npm -v 命令,可以查看自己电脑上安装的 npm 包管理工具的版本号。

 npm初体验

这里我们以格式化时间为示例,先看看传统的做法

//test03.js

// 定义格式化时间的函数
function dataFormat(dataStr) {
  let dt = new Date(dataStr);
  let y = padZero(dt.getFullYear());
  let m = padZero(dt.getMonth() + 1);
  let d = padZero(dt.getDate());
  let hh = padZero(dt.getHours());
  let mm = padZero(dt.getMinutes());
  let ss = padZero(dt.getSeconds());
  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
}

// 定义补零函数
function padZero(n) {
  return n > 9 ? n : "0" + n;
}

// 向外暴露需要的成员
module.exports = {
  dataFormat,
};
//test03.1.js

// 导入自定义的格式化时间的模块
const getTime = require("./test03");

//调用方法,进行时间的格式化
let dtStr = getTime.dataFormat(new Date());
console.log(dtStr);

格式化时间的高级做法:

使用 npm 包管理工具,在项目中安装格式化时间的包 moment;

在项目中安装包的命令:

 上述命令可以简写为:

// 导入需要的包
const moment = require("moment");

// 格式化时间
const dt = moment().format("YYYY-MM-DD HH:mm:ss");

console.log(dt);

初次装包完成后,在项目中、文件夹下多一个叫做 node_modules 的文件夹和 package-lock.json 的配置文件。其中:

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

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


安装指定版本的包

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

npm i moment@2.22.2

包的配置管理文件

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

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

快速创建 package.json:

//作用:在执行命令所处的目录中,快速创建 package.json 文件
npm init -y

注意:

(1)上述命令只能在英文目录下成功运行,且不能出现空格。

(2)运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到package.json 中。

dependencies节点:

package.json 文件中,有一个 dependencies 节点,用来记录你使用 npm install 命令安装了哪些包

一次性安装所有的包:

当我们拿到一个剔除了 node_modules 的项目后,需要先把所有的包下载到项目中,才能将项目运行起来,否则会报错。

可以运行 npm install 命令(或 npm i ) 一次性安装所有的依赖包:

//执行 npm install 命令时,npm 包管理工具会先读取 package.json 中的 dependencies 节点
//读取到记录的所有依赖包名称和版本号之后,npm 包管理工具会把这些包一次性下载到项目中
npm install

卸载包:

//使用 npm uninstall 具体的包名 来卸载包
npm uninstall moment

注意:npm uninstall 命令执行成功后,会把卸载的包,自动从 package.json 的 dependencies 中移除掉

devDependencies 节点:

如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies 节点中。

//安装指定的包,并记录到 devDependencies 节点中
npm i 包名 -D

//注意:上述命令是简写形式,等价于下面完整的写法
npm install 包名 --save-dev

 解决下包速度慢的问题

在使用 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 目录中的包,都是项目包。

项目包又分为两类:

(1)开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到)

(2)核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线后都会用到)

npm i 包名 -D   //开发依赖包(被记录到 devDependencies 节点下)

npm i 包名      //核心依赖包(被记录到 dependencies 节点下

全局包:

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

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

npm i 包名 -g              //全局安装指定的包

npm uninstall 包名 -g      //卸载全局安装的包

注意:

(1)只有工具性质的包,才有全局安装的必要性,因为它们提供了好用的终端命令;

(2)判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可。

扩展:i5ting_toc

i5ting_toc 是一个可以把 md 文档转换为 html 页面的小工具,使用步骤如下

//将 i5ting_toc 安装为全局包
npm install -g i5ting_toc

//调用 i5ting_toc,轻松实现 md 转 html 的功能
i5ting_toc -f 要转换的md文件路径 -o

规范的包结构 

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

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

(1)包必须以单独的目录而存在;

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值