Node.js之模块化
哈喽小伙伴们,最近都在看什么剧啊,感觉一直都处于剧荒状态,一个等了超级久的剧但是没几天就播完了,还没有看爽就没了,现在的剧也是一直处于更新中,非常慢,导致每天都不知道要干点儿啥,毕业设计没搞完但是也不想弄,还有毕业论文,总觉得离毕业还有很久,没想到这么快就到时间了,这一毕业就再也没有学生这个头衔了,也不能再逃课,没有八百一年的宿舍,没有每天吃喝玩乐的同学了......
http部分我们可以稍微告一段落,今天想和大家分享的是Node.js中的模块化。
一、模块化的基本概念
1.什么是模块化
模块化是指解决一个复杂问题时,自顶向下逐层把系统划分为若干模块的过程,对于整个系统来说,模块时可组合、分解和更换的单元。
编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并相互依赖的多个小模块。
把代码进行模块化拆分的好处
①提高了代码的复用性
②提高了代码的可维护性
③可以实现按需加载
2.模块化规范
模块化规范就是对代码进行模块化的拆分与组合时,新业态遵守的那些规则。
例如:
- 使用什么样的语法格式来引用模块
- 在模块中使用什么样的语法格式向外暴露成员
模块化规范的好处:大家遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用,利人利己
3.Node.js中模块的分类
Node.js中根据模块来源的不同,将模块分为了3大类,分别是:
- 内置模块(内置模块时由Node.js官方提供的,例如fs、path、http等)
- 自定义模块(用户创建的每个.js文件,都是自定义模块)
- 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用需要先下载)
二、模块使用
1.加载模块
使用强大的“require()”方法,可以加载需要的内置模块、用户自定义模块、第三方模块进行使用。例如:
// 加载内置的fs模块
const fs = require ('fs')
// 加载用户的自定义模块
const custom = require('./index.js')
// 加载第三方模块(关于第三方模块的下载和使用,会在后面分享到)
const moment = require('moment')
注意:使用require()方法加载其他模块时,会执行被加载模块中的代码
2.模块作用域
模块作用域和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块被访问,这种模块级别的访问限制,叫做模块作用域。
为了更好理解,我们做一个小例子,首先打开vscode在我们文件夹里创建一个js文件
// 在模块作用域内定义西药的常量username
const username = '张三'
// 定义一个sayHello函数
function sayHello(){console.log('大家好,我是'+username)
}
在同一文件夹下创建另一个.js文件用来测试
// 导入自定义模块
const zidingyi = require('./mokuaizuoyongyu')
console.log(zidingyi)
然后我们打开cmd或者PowerShell窗口,或者在vscode终端进行运行
我们可以发现,终端并没有给我们输出我们所设置的”张三“,而是输出了{ } 空对象,是因为在我们建立的第二个js文件中,无法访问到第一个文件夹模块中的私有成员。
模块作用域的好处:防止了全局变量污染的问题
我们可以在刚才的文件夹内创建一个.html文件然后再body随便输入点内容,再分别创建两个js文件,一个文件内容为:var username = 'zs',另一个为:var username = 'ls',然后再html文件里插入两个文件。
html文件:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=\, initial-scale=1.0"><title>Document</title>
</head>
<body><p>你好,world</p><script src="./reg.js"></script><script src="./login.js"></script><script>console.log(username)</script>
</body>
</html>
第一个js文件:
var username = 'zs'
第二个js文件
var username = 'ls'
然后在浏览器打开.html文件,按f12,点击控制台,会发现只有”ls“一个数据
这是因为两个文件同时赋给了username两个不同的值,所以发生了混乱,只能显示最近赋给的值,但是在两个js文件中,他们还是可以都显示各自的内容的。
以上就是今天的分享了,明天会和大家介绍怎么样模块化。
今天突然发现了一个宝藏歌手,他叫陈泫孝,他有首非常好听的歌,很久之前就知道这个歌,现在听也依然感觉非常舒心。
静悄悄
祝:
晚安,好梦
Node.js之模块化相关推荐
- Node.js模块化开发||Node.js中模块化开发规范
JavaScript开发弊端 a.js b.js JavaScript在使用时存在两大问题,文件依赖和命名冲突. 生活中的模块化开发 软件中的模块化开发 app.j user.一个功能就是一个模块,多 ...
- node js的模块化的分类
一.node js的模块化的分类: (1)系统模块 (2)自定义模块 二.对外输出: 对外输出东西--必须加给exports (1)单个输出: exports.xxx=??; exports.xxx= ...
- 【Node学习】—Node.js中模块化开发的规范
[Node学习]-Node.js中模块化开发的规范 Node.js 规定一个JavaScript就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到 模块化内部可以使用exports对象进行 ...
- Node.js ES6模块化
AMD 和 CMD 适用于浏览器端的 Javascript 模块化 CommonJS 适用于服务器端的 Javascript 模块化 ES6 语法规范中,在语言层面上定义了 ES6 模块化规范,是浏览 ...
- Node.js ES6 模块化的基本语法-直接导入并执行模块代码
想单纯执行某个模块中的代码,并不需要得到模块中向外暴露的成员,可以直接导入并执行模块代码 m1.js // 当前文件模块为 m1.js for(let i = 0; i < 3; i++) { ...
- Node.js ES6 模块化的基本语法-按需导出与按需导入
按需导出语法 export let s1 = 10 按需导入语法 import { s1 } from '模块标识符' m1.js // 当前文件模块为 m1.js export let s1 = ' ...
- Node.js ES6 模块化的基本语法-默认导出 与 默认导入
默认导出语法 export default 默认导出的成员 默认导入语法 import 接收名称 from '模块标识符' m1.js // 当前文件模块为 m1.js let a = 10 // 定 ...
- Node.js 模块化开发
JavaScript在使用时存在两大问题,文件依赖和命名冲突. 文件依赖:文件之间的依赖关系,通过文件来自动维护,而不需要人工分析 命名冲突:JavaScript中不同js文件,变量是完全开放的,相同 ...
- JS模块化规范对比以及在Node.js的实现
文章目录 写在前面 JavaScript模块化的规范 Node.js 的模块化实现 AMD or CMD 代码示例 ES6模块化标准以及在Node.js的使用 写在前面 关于JavaScript的模块 ...
最新文章
- 【golang程序包推荐分享】go-ini、viper、godoc
- python进程数上限_python如何控制进程或者线程的个数
- 详解PyTorch编译并调用自定义CUDA算子的三种方式
- C语言缓冲区(缓存)详解
- 5.1Python函数(一)
- 无线多操作系统启动之uInitrd阶段NFS挂载篇
- android - 拍照
- 现金流量表的编制方法及程序
- 结构体成员赋值-标记化结构体初始化语法-结构体成员前面加小数点
- 汇编语言位向量(位映射)
- SQL Server远程部署
- python内置函数用来返回_Python内置函数用法
- 从事前到事后,云数据库 Redis MongoDB 安全体系全揭秘!
- windows获取系统补丁+匿名管道
- C/C++中printf和C++中cout的输出格式
- ollvm源码分析之控制流扁平化(3)
- 打开软件后跳出服务器正在运行中,win10系统打开软件提示“服务器正在运行中”的操作步骤...
- 实践教程 | 万字长文,值得收藏/参考的OpenCV C++基础代码
- linux免费私人云盘软件,Appnode+kodexplorer免费搭建私有云盘
- JS实现将数字金额转换为大写人民币汉字的方法
热门文章
- js的window.print()打印背景图片,打印背景图片无法显示
- 柚缘航海:Tik Tok直播带货怎么做?
- 大话西游2接收服务器信息失败,大话西游2移民抽签失败十余次 三转玩家怒曝武器...
- 生男生女真的那么重要吗?
- el-tree的局部刷新(懒加载)
- 各种“Phone”辈出 购置裸机或更划算
- 微信公众号最佳实践 ( 8.4)姓名测试
- 工业互联网平台-厂商及产品调研
- 张家界三日游攻略 | 张家界三天怎么玩
- linux nginx 配置ssl证书访问