Node.js — 模块化

文章目录

  • 1.模块化
    • 1.模块化与作用域
    • 2. module 模块
    • 3.npm与包

1.模块化

1.模块化与作用域

  1. 编程领域中的模块化:遵守固定的规则,把一个大文件拆成独立并相互依赖的多个小模块。
  2. 模块化好处:提高代码复用性,可维护性和按需加载
  3. 模块化语法规范CommonJSrequire 引用模块 与 module.exports向外暴露成员
    1. CommonJS规范了: 模块的特性 以及 各模块之间如何相互依赖
    2. module 变量代表当前模块,是一个对象,其exports属性是对外接口,需要require( )方法加载该属性
  4. Node.js 的 模块分类:内置模块(fs,path,http,由官方提供),自定义模块(用户创建的每个js文件),第三方模块(由第三方开发,非官方提供,使用前需要下载)
  5. 执行模块:通过 require( ) 方法(会自动补全 js 后缀)可以加载使用模块,执行被加载模块中的代码
  6. 模块作用域:与和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域(防止了全局变量污染的问题)

2. module 模块

  1. 相关属性:module.path [ 文件的相对路径 ] ; .filename:[文件路径内的完整名称]; .exports:[ 指向空对象 ](可以通过其向外共享成员)
  2. module.exports 对象:将模块内的成员共享出去,供外界使用,外界使用 require 方法导入自定义模块时,得到的就是 module.exports 所指向对象
  3. 默认 exports 和 module.exports 指向同一个对象,最终共享的结果,还是以 module.exports 指向的结果为准
  4. 防止混乱尽量不要在同一个模块中使用 exports 和 module.exports

3.npm与包

  1. 包:又叫第三地方模块

  2. 包的来源:由第三方个人或团队开发,供人免费试用

  3. 包的作用:基于内置模块封装而成,提供了更高级,更方便的API,提高开发效率。

  4. 包与内置模块的关系类似于jQuery 与 浏览器内置API 之间的关系

  5. npm i moment 安装成功后会多一个 node_modules 文件夹【存放所有已安装到项目的包,require 从该目录查找并导入加载包】和两个 js 文件(package - lock.json【记录上面文件夹的目录下的每一个包的下载信息】和package,json),注意,不要手动修改以上任何代码,npm包管理工具会自动维护。

  6. package.json 【包管理配置文件,用来记录与项目有关的一些配置信息】,必须包含在项目根目录中。
    1.包含的配置信息:

     	1. 项目的名称,版本号,描述, 
     	2. 项目中用到那些包
     	3. 那些包只在开发期间会用到
     	4. 那些包在开发和部署时都需要用到
    
  7. 包的语义化规范:版本号以‘’点分十进制‘’定义,总共三位数字,例2.24.0.
    1.第1位:大版本,第2位:功能版本,第3位:Bug修复版本
    2.版本号提升,后面全部归零

  8. 多人项目开发不需要上传node_module 文件夹到github,将其添加到.gitignore忽略文件中,而可以创建 package.json 用来记录项目中安装的包,方便团队成员共享项目源代码。

    1. 新建package.json文件快捷键:npm init -y 【只能在 英文 或 无空格 目录运行,运行npm install 命令安装包,npm自动将包名称等信息记录其中】,其中必须包含 name,version 以及 main属性
    2. dependencies 节点 [ 核心依赖包 ]【存放在项目开发以及上线后均会用到的包】 用来记录使用npm i 命令安装了哪些包,方便误删 node_module 后重新安装所有依赖包
    3. 卸载依赖包:命令 npm uninstall + 包的名称
    4. devDependencies 节点 [开发依赖包] :存放只在项目开发阶段而项目上线后不会用到的包,使用 npm i 包名 -D 【是 npm i --save-dev 包名 的缩写】快捷命令将指定包安装 其中
  9. 【扩展】镜像:一种文件存储形式。一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本。例如·:淘宝NPM镜像服务器(解决下包速度慢的问题)

    1. 下包镜像源:下包的服务器地址。 检查下包镜像源命令·: npm config set registry
    2. 切换为淘宝镜像源命令: npm config set registry=https://registry.npm.taobao.org/
    3. nrm : 方便查看和切换 包镜像源 。安装 npm i nrm -g,查看所有镜像源 nrm ls ,下包镜像源切换nrm use taobao
  10. 包的分类:开发依赖包和核心依赖包。

    1. 全局包:提供 -g 参数,
npm i包名-g //全局安装指定的包
npm uninstall 包名-g//卸载全局安装的包
	2.`i5ting_toc`:  一个吧md文档转为html页面的工具 
//将i5ting_toc安装为全局包
npm install -g i5ting_toc
//调用,轻松实现md转换为html的功能
i5ting_toc -f 要转换的md文件路径 -o
  1. 开发自己的包:
    1.初始化 package.json ,必备属性:

    1. name :包名,需要具备唯一性
    2. version:包版本号
    3. main : 外界默认入口文件
    4. description:包的简短信息
    5. keywords,搜索关键字
    6. license :默认许可协议,ISC
    
    1. 开发属于自己的包
      1.需要实现的功能
      格式化日期
      转义Html中的特殊字符
      还原html中的特殊字符
    2. 发布 npm publish 包名,删除npm unpublish 包名 --froce
  2. 模块的加载机制:

1. 优先从缓存中加载 

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

2. 内置模块的加载机制

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

3. 自定义模块的加载机制

使用require()加载自定义模块时,必须指定以./或…/开头的路径标识符。在加载自定义模块时,如果没有指定的话,则node模块就会把他当成内置模块或者第三方模块进行加载
同时,在使用require()导入自定义模块时,如果省略了文件的拓展名,则node.js就会按顺序分别尝试加载以下的文件
1.按照确切的文件名进行加载
2.补全.js拓展名进行加载
3.补全.json拓展名进行加载
4.补全.node拓展名进行加载
5.加载失败,终端报错

4. 第三方模块的加载机制

如果传递给require()的模块标识符不是一个内置模块,也没有./等等开题,则Node.js会从当前模块的父目录开始,尝试从.node_modules文件夹中加载第三方模块。如果没有找到第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录

Node.js — 模块化_第1张图片

你可能感兴趣的:(node.js,javascript,前端)