node中的模块

tech2022-10-22  99

@node中的模块

npm 的基本操作

安装

npm i 包名称

导入

const moment = require('moment')

安装指定版本的包

npm i 包名称@版本号

包管理配置

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

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

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

快速创建 package.json 文件 英文名 不能空格

npm init -y

一次性安装 package.json里面所有的文件

npm i

卸载

npm uninstall 文件名 npm remove 文件名

devDependencies节点

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

安装指定的包 并记录到 devDependencies 节点中

npm i 包名 -D

查看当前的下包镜像源

npm config get registry

将下包的地址切换为淘宝镜像源

npm config set registry=http://registrynpm.taobao.org/

解决下包慢的问题

通过 npm 包管理器 将 nrm 安装为全局可用的工具

npm i nrm -g

查看所有可用的镜像源

```javascript nrm ls **将下包的镜像源切换为 taobao 镜像** ```javascript nrm use taobao

包的分类

项目包

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

项目包又分为两类,分别是: 开发依赖包

npm i 包名 -D

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

npm i 包名

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

全局包

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

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

npm i 包名 -g 全局安装指定的包 npm uninstall 包名 -g 卸载全局安装的包

注意:

① 只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令。 ② 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可。

i5ting_toc

i5ting_toc 是一个可以把 md 文档转为 html 页面的小工具

将 i5ting_toc 安装为全局包

npm install -g i5ting_toc

调用 i5ting_toc 轻松实现 md 转 html 的功能

i5ting_toc -f 要转换的md文件路径 -o

规范的包结构

一个规范的包,它的组成结构,必须符合以下3 点要求: ① 包必须以单独的目录而存在 ② 包的顶级目录下要必须包含 package.json 这个包管理配置文件 ③ package.json 中必须包含 name,version,main这三个属性,分别代表包的名字、版本号、包的入口。 **注意:**以上 3 点要求是一个规范的包结构必须遵守的格式,关于更多的约束,可以参考如下网址: https://yarnpkg.com/zh-Hans/docs/package-json

模块的加载机制

优先从缓存加载

模块在第一次加载后会被缓存。这也意味着多次调用require() 不会导致模块的代码被执行多次。 注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

内置模块的加载机制

内置模块是由Node.js 官方提供的模块,内置模块的加载优先级最高。 例如,require(‘fs’) 始终返回内置的fs 模块,即使在node_modules 目录下有名字相同的包也叫做fs。

自定义模块的加载机制

使用 require() 加载自定义模块时,必须指定以./ 或 …/ 开头的路径标识符。在加载自定义模块时,如果没有指定./ 或 …/ 这样的路径标识符,则 node 会把它当作内置模块或第三方模块进行加载。 同时,在使用require() 导入自定义模块时,如果省略了文件的扩展名,则Node.js 会按顺序分别尝试加载以下的文件: ① 按照确切的文件名进行加载 ② 补全 .js 扩展名进行加载 ③ 补全 .json 扩展名进行加载 ④ 补全 .node 扩展名进行加载 ⑤ 加载失败,终端报错

第三方模块的加载机制

如果传递给 require() 的模块标识符不是一个内置模块,也没有以‘./’ 或 ‘…/’ 开头,则 Node.js 会从当前模块的父 目录开始,尝试从/node_modules 文件夹中加载第三方模块。 如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。 例如,假设在’C:\Users\itheima\project\foo.js’ 文件里调用了 require(‘tools’),则 Node.js 会按以下顺序查找: ① C:\Users\itheima\project\node_modules\tools ② C:\Users\itheima\node_modules\tools ③ C:\Users\node_modules\tools ④ C:\node_modules\tools

目录作为模块

当把目录作为模块标识符,传递给 require() 进行加载的时候,有三种加载方式: ① 在被加载的目录下查找一个叫做package.json 的文件,并寻找main 属性,作为require() 加载的入口 ② 如果目录里没有 package.json 文件,或者 main 入口不存在或无法解析,则 Node.js 将会试图加载目录下的 index.js 文件。 ③ 如果以上两步都失败了,则 Node.js 会在终端打印错误消息,报告模块的缺失:Error: Cannot find module ‘xxx’

最新回复(0)