0
点赞
收藏
分享

微信扫一扫

node.js模块化、npm与包

奋斗De奶爸 2022-02-13 阅读 53

模块化:遵守固定的规则,把一个大文件,拆成若干个独立的小模块。

优点:易复用、易维护、可以按需加载。

三类模块:内置模块、自定义模块、第三方模块

使用require()方法,可以加载模块

向外共享模块作用域中的成员

1、每个.js自定义模块中都有一个module对象,里面存储了和当前模块有关的信息;

2、module.exports对象,可以将模块内的成员共享出去。(为了简化向外共享成员的代码,Node 提供了 exports 对象。默认情况 下,exports 和 module.exports 指向同⼀个对象。最终共享的结 果,还是以 module.exports 指向的对象为准。)

包:第三方模块

npm:包管理工具

npm -v 查看版本号

npm install 包名 / npm i 包名 安装包(初次装包完成后,在项⽬⽂件夹下多⼀个叫做 node_modules 的⽂件夹和 package-lock.json 的配置⽂件。其中: node_modules ⽂件夹⽤来存放所有已安装到项⽬中的包。require() 导⼊第三⽅包 时,就是从这个⽬录中查找并加载包。 package-lock.json 配置⽂件⽤来记录 node_modules ⽬录下的每⼀个包的下载信息,例如 包的名字、版本号、下载地址等。 注意:程序员不要⼿动修改 node_modules 或 package-lock.json ⽂件中的任何代码,npm 包管理⼯具会⾃动维护它们。)

npm i 包名@版本号 安装指定版本的包

npm init -y 快速创建 package.json

npm install /npm i 一次性安装所有依赖包

npm uninstall 包名 卸载包

npm i -D 包名(npm install 包名 --save-dev)  安装指定的包,并记录到devDependencies 节点中

包下载慢的问题,可以切换镜像源

# 查看当前的下包镜像源
npm config get registry
# 将下包的镜像源切换为淘宝镜像源
npm config set registry='https://registry.npm.taobao.org/'
# 检查镜像源是否下载成功
npm config get registry

可以安装nrm工具,快速切换和查看

# 通过npm包管理器,将nrm 安装为全局可用的工具
npm i nrm -g
# 查看所有可用的镜像源
nrm ls
# 将下子包的镜像源切换为 taobao镜像
nrm use taobao

包:两大类

项目包

  • 开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到)
  • 核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到)
npm i 包名 -D  # 开发依赖包(会被记录到 devDependencies 节点下)
npm i 包名 # 核心依赖包 (会被记录到 dependencies 节点下)

全局包

在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为全局包。 全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下。

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

只有工具性质的包,才有安装全局的必要。

模块的加载机制

1、优先从缓存中加载、内置、自定义、第三方

2、内置模块优先级最高

3、自定义模块加载机制,require()导入模块时忽略扩展名,node.js会按顺序尝试加载

  1. 精确查找
  2. 添加.js扩展名
  3. 添加.json扩展名
  4. 添加.node扩展名
  5. 报错

4、第三方模块加载机制

Node.js 会从当前模块的父 目录开始,尝试从 /node_modules 文件夹中加载第三方模块。如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。

5、目录作为模块

  1. 在被加载的目录下查找一个叫做 package.json 的文件,并寻找 main 属性,作为 require() 加载的入口
  2. 如果目录里没有 package.json 文件,或者 main 入口不存在或无法解析,则 Node.js 将会试图加载目录下的 index.js 文件。
  3. 如果以上两步都失败了,则 Node.js 会在终端打印错误消息,报告模块的缺失:Error: Cannot find module 'xxx'
举报

相关推荐

0 条评论