什么是模块化
-node模块化:遵循了commonJS的规范,一个文件是一个模块。
nodeJS本身就自带模块化的思想 导入(require)、导出(module.exports)。
-js的模块化:指一个js文件里面引用另一个js文件
js模块化是由Es6出来时,才提出来的,但是由于浏览器兼容性问题,没有广泛使用开。
后来一些开发工具的出现才让模块化很方便的使用。导入(import)、导出(export)
为什么要使用模块化
因为模块化可以使我们的代码具有可复用性、高维护性、按需加载
一个个模块就像是做房子的一块块砖一样
1. nodeJS中的模块分类
- 内置模块:由nodeJS官方提供的,例如fs文件读写模块、path路径模块、http网络请求模块等
- 自定义模块:由用户自己创建的js文件,导入的时候需要有相对路径
- 第三方模块:由其他个人或公司开发的模块,然后上传到npm网站上的模块,使用前需要先安装。
2. node模块化
node模块化遵循了commonJS的规范,一个文件是一个模块。 模块导入 -- require 模块导出 -- module.exports
//导出形式 默认值为一个空对象 {}
module.exports = {
'需要导出的对象'
...
}
//另一种导出形式
exports.a = 2
注意: 导出时,应始终以 module.exprts 导出的对象为准
//导入形式
const index = './index'
node里面导入的时候,.js后缀名可以省略
3.npm与包
第三方模块也叫做“包” 一些常见的npm命令
//安装包
npm i 包名
npm i 包名1 包名2
//安装指定版本的包
npm i 包名@x.x.x
//快速新建package.json文件
npm init -y
//一次安装所有包 可以更新node_module文件夹
npm i
//卸载包
npm uninstall 具体的包名
//查看当前的下包镜像源
npm config get registry
//设置镜像源
npm config set registry=https://xxx/
dependencies节点
专门用来记录用npm install命令安装了哪些包
devDependencies节点
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies节点中。
与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点
//安装指定的包,并记录到devDependencies节点中
npm i 包名 -D
npm install 包名 --save-dev
温故而知新:
- 改变函数内部this指向的三种方法及区别
改变函数内部this指向的三种方法分别是:call()、apply()、bind() fun.call(thisArg, arg1, arg2, …) --call方法会直接调用函数,可以传递多个参数,常用于继承 fun.apply(thisArg, [argsArray]) --也会直接调用函数,传递的参数要是一个数组,常用于数组 fun.bind(thisArg, arg1, arg2, …) -- 只改变this指向一般都用bind - 说出迭代遍历数组,筛选数组,查找数组中是否有满足条件的元素这三种方法
forEach()方法、filter()方法、some() - 说出闭包的定义及作用
闭包:一个内部函数使用外部函数的变量,一般存在嵌套关系 能够延长变量的生命周期, - 定义变量的几种方式分别是什么?有什么区别?
var let const var没有块级作用域,还有声明提升,存在很多缺陷 let 有块级作用域 const 定义常量 - flex布局主轴有哪几种排列方法
justify-content: flex-start/flex-end/center/space-between/space-bround - 浅拷贝和深拷贝的区别
浅拷贝只是把地址值复制过去了,一个的值发送变化,另一个也会跟着变化 深拷贝不仅复制内容,也重新分配了一片内存空间 - 防抖和节流的区别?如何实现防抖和节流?
防抖:在一定时间内,频繁触发事件,只有最后一次生效。一定时间内触发事件,会让定时器重置计时。常用于input输入框。 节流:减少事件的触发频率。常用于scroll、mousemover事件。 - 什么是跨域?跨域有几种解决方法?
请求的url的协议、域名、端口号与当前url的有任何一个不同,就发生了跨域 常见的解决方式有:JSONP、CORS - 图片懒加载的原理
把图片的src属性换成自定义的属性,通过判断页面的scrillTop()方法,动态设置src属性 - 构造函数,原型对象,对象实例之间是怎样查询的?
构造函数的显式原型等于原型对象的隐式原型 - 三元表达式的用法是什么?
条件判断式?值1 : 值2 条件为true就是值1 - 在Nodejs中如何拼接路径字符串?
path.join(__dirname,'')