Node.js模块化
目录
一、模块化的基本概念
1、什么是模块化
2、模块化规范
二、Node.js 中的模块化
1、Node.js 中的模块化分类
2、加载模块
3、向外共享模块作用域中的成员
4、Node.js 中的模块化规范
三、npm 与 包
1、包的概念
2、包的安装与卸载
3、包管理配置文件
一、模块化的基本概念
1、什么是模块化
模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。
编程领域中的模块化
就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。 把代码进行模块化拆分的好处:
- 提高了代码的复用性
- 提高了代码的可维护性
- 可以实现按需加载
2、模块化规范
模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。
例如:
- 使用什么样的语法格式来引用模块
- 在模块中使用什么样的语法格式向外暴露成员
模块化规范的好处:
大家都遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用,利人利己。
二、Node.js 中的模块化
1、Node.js 中的模块化分类
Node.js 中根据模块来源的不同,将模块分为了 3 大类,分别是:
内置模块(内置模块是由 Node.js 官方提供的,例如 fs、path、http 等)
自定义模块(用户创建的每个 .js 文件,都是自定义模块)
第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)
2、加载模块
使用 require() 方法,可以加载需要的内置模块、用户自定义模块、第三方模块进行使用。
// 1、加载内置fs模块
const fs = require('fs')
//2、加载自定义模块
const tre = require('./tre.js')
//3、加载第三方模块
const moment=require('moment')
3、向外共享模块作用域中的成员
module.exports 对象:
在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息。
在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。
外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象。
4、Node.js 中的模块化规范
(1)什么是CommonJS模块规范
- CommonJS 是一套代码规范, 目的是为了构建 JavaScript 在浏览器之外的生态系统 (服务器端, 桌面端).
- 通过该规范使JavaScript具备开发复杂应用、跨平台的能力
Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖。
(2) CommonJS 模块化规范
CommonJS模块规范化的内容 | |
---|---|
导出模块: | moudle.exports 导出模块 |
导入模块: | require('模块名称') |
CommonJS 规定:
- 每个模块内部,module 变量代表当前模块。
- module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。
- 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。
(3)每个导出的模块都有一个moudle对象,该对象包含的属性有:
moudle.exports: | 表示当前模块对外输出的接口,其他模块引用的是moudle.exports导出的变量 |
exports变量: | 指向moudle.exports,为了操作的方便,它不能直接指向一个值 |
(4)使用require导入模块:导入并执行一个JavaScript文件,返回的是一个exports对象,若没有找到相应的对象就报错
- 模块输出是一个函数,则该函数的输出接口不能用exports变量来导出,必须用户moudle.exports导出
- 加载规则:
A、用来加载js文件,默认的文件扩展名为.js
B、根据参数的不同格式,去不同路径下查找相应的js文件
'./(../)':表示加载路径是相对路径
'/':表示加载路径是绝对路径
既不是'./(../)'也不是'/':表示加载的模式是node的核心模块,在node安装路径的node_modules中
- require的内部处理的流程
require -->module.exports-->moudle._load
三、npm 与 包
1、包的概念
什么是包?
Node.js 中的第三方模块又叫做包。 就像电脑和计算机指的是相同的东西,第三方模块和包指的是同一个概念,只不过叫法不同。
包的来源?
不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。 注意:Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用。
为什么需要包?
由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发的时,效率很低。 包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率。 包和内置模块之间的关系,类似于 jQuery 和 浏览器内置 API 之间的关系。
2、包的安装与卸载
npm 包的安装——
npm install 包的完整名称
npm 包的卸载——
npm uninstall 包的完整名称
安装指定保本的包——
默认情况下,使用 npm install 命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过 @ 符号指定具体的版本,例如
npm install moment@2.12.1
3、包管理配置文件
npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置信息。例如:
- 项目的名称、版本号、描述等
- 项目中都用到了哪些包
- 哪些包只在开发期间会用到
- 哪些包在开发和部署时都需要用到
Node.js模块化相关推荐
- [Node.js] 模块化 -- path路径模块
路径问题 nodejs中相对路径,相对的是运行这个node文件的小黑框的路径而言的. 相关变量 __dirname 获取的是当前这个文件所在的这个文件夹的绝对路径 __filename 拿到的是当前这 ...
- Node.js模块化开发(非常详细,满满的干货)
下面是对Node.js模块化开发的整理,西洼港可以帮助到有需要的小伙伴~ 文章目录 Node.js模块化开发 JavaScript开发弊端 Node.js模块化开发 模块成员导出的export方法 模 ...
- Node.js 模块化的操作,简单明了的代码帮助你明白后端的实现和前端之前的交互,及解决跨域等问题
Node.JS 模块化 1.require 导入模块const http=require('http')2.exports 导出模块db={name:'jine',age:22} module.e ...
- Node.js模块化开发
Node.js模块化开发 一.Node.js模块化开发 二.系统模块 1.什么是系统模块 2.系统模块fs文件操作 3.系统模块path路径操作 三.第三方模块 1.什么是第三方模块 2.获取第三方模 ...
- 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session
1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...
- Node.js模块化开发||Node.js中模块化开发规范
JavaScript开发弊端 a.js b.js JavaScript在使用时存在两大问题,文件依赖和命名冲突. 生活中的模块化开发 软件中的模块化开发 app.j user.一个功能就是一个模块,多 ...
- Node.js 模块化开发
JavaScript在使用时存在两大问题,文件依赖和命名冲突. 文件依赖:文件之间的依赖关系,通过文件来自动维护,而不需要人工分析 命名冲突:JavaScript中不同js文件,变量是完全开放的,相同 ...
- 了解node.js模块化和npm包
模块化-理解模块化 根目录 ├── index.html # 主页的页面 ├── index.js # 主页需要用到的js代码 │ └── getData() # 是index.js中定义的函数 └─ ...
- JS模块化(node.js模块化和es6模块化)
JS 模块化 模块化概念 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分为若干模块的过程,模块是可组合.分解和更换的单元. 模块化可提高代码的复用性和可维护性,实现按需加载. 模块化规范是对代码 ...
最新文章
- Netty面试题 汇总
- java javac javap 命令使用简介
- 计算机二级评卷看结果还是步骤,计算机二级评分严格吗 步骤错了有分吗
- 阿里云容器网络文件系统 CNFS 1.0 发布,体验云原生时代的容器共享存储
- HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview
- 在jsp文件中通过超链接访问servlet_Eclipse中创建Servlet
- 数据库杂谈(三)——关系代数
- 红帽linux怎么装文件夹,红帽linux怎么安装第三方字体?
- 400集python入门到精通_2020年最强Python学习路线+教程,400集带你从入门到精通
- 图片切换ajax,jQuery AJAX全屏图文幻灯切换
- qq发文件大小上限_微信再两个放大招!网友:QQ可以卸载了?
- linux协议栈网桥部分之cam表操作,Docker网络基础 - Linux网桥工作原理与实现
- 计算机创建不了文本文档,电脑系统没有新建文本文档怎么解决?
- 利用树莓派为HP LaserJet 1020配置无线打印功能
- Mac访达查看隐藏文件的快捷键、命令行设置两种方式
- 【SDOI2015】星际战争(网络流)
- 初入职场如何时间管理课程总结-B站
- 使用Statsmodels在Python中进行重复测量方差分析
- 【美团技术团队】2014年-2022年后端文章精选篇
- IllegalArgumentException 异常时一个不易觉察的原因
热门文章
- 云计算要用5G技术,那5G是什么?
- python绘制对数坐标图描点,python坐标轴对数显示
- arch linux 包管理器,archlinux 包管理
- C++:实现量化设置期限结构,然后确定价格如“价格收益率”或“收益率价格”测试实例
- switch+ 三元运算符 +while +do while +for
- windows怎么开启自动登录
- 关于Deepin如何连接有配对码的蓝牙键盘(以K480为例)
- Debian连接不能连接蓝牙耳机
- 万邦淘宝/天猫获得淘口令真实url API 返回值说明
- 如何实现一个手帐 APP开发