1、CommonJS 规定了哪些内容

2、Node.js 中模块的三大分类各自是什么

分类

内置模块

自定义模块

第三方模块

使用require加载模块

加载定义的模,需要路径

module 对象

Node.js中的模块作用域

截屏2022-04-28 08.50.41.png

Node.js中的模块化规范

3、npm(Node Package Manager)管理包

3.4 切换npm下包镜像源

npm config get registry
npm config set registry=https://registry.npm.taobao.org

https://registry.npm.taobao.org

使用nrm切换包源
npm i nrm -g

  1. npm ERR! code EACCES
  2. npm ERR! syscall mkdir
  3. npm ERR! path /usr/local/lib/node_modules/nrm
  4. npm ERR! errno -13
  5. npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/nrm'
  6. npm ERR! [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/nrm'] {
  7. npm ERR! errno: -13,
  8. npm ERR! code: 'EACCES',
  9. npm ERR! syscall: 'mkdir',
  10. npm ERR! path: '/usr/local/lib/node_modules/nrm'
  11. npm ERR! }
  12. npm ERR!
  13. npm ERR! The operation was rejected by your operating system.
  14. npm ERR! It is likely you do not have the permissions to access this file as the current user
  15. npm ERR!
  16. npm ERR! If you believe this might be a permissions issue, please double-check the
  17. npm ERR! permissions of the file and its containing directories, or try running
  18. npm ERR! the command again as root/Administrator.
  19. npm ERR! A complete log of this run can be found in:
  20. npm ERR! /Users/liujiexin/.npm/_logs/2022-05-04T15_28_25_265Z-debug-0.log

解决办法
sudo chown -R $USER /usr/local/lib/node_modules

nrm ls
nrm use taobao

3.5、包的 分类

1、项目包

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

2、全局包

npm i nrm -g # 安装包时 带有 -g参数, 表示安装为全局包
安装 路径 /usr/local/lib/node_modules/nrm

卸载包
npm uninstall 包名 -g

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

npm install -g i5ting_toc

3、npm 与包

3.7 开发一个属于自己的包

3.8 发布包

1、注册npm 账号
image.png
2、切换包仓库
nrm use npm

3、把包发布到npm上
切换到包目录下
npm publish

删除发布的包
npm unpublish jx-tools —force

4、模块的加载机制

4.1 优先从缓存中加载

模块在第一次加载后会被缓存。

4.2 内置模块的加载机制

内置模块的加载优先级级最高

4.3 自定义模块的加载机制

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