node模块化


### 什么是模块化

    -node模块化:遵循了commonJS的规范,一个文件是一个模块。
    nodeJS本身就自带模块化的思想 导入(require)、导出(module.exports)。
    
    -js的模块化:指一个js文件里面引用另一个js文件
    js模块化是由Es6出来时,才提出来的,但是由于浏览器兼容性问题,没有广泛使用开。
    后来一些开发工具的出现才让模块化很方便的使用。导入(import)、导出(export)
    
### 为什么要使用模块化

    因为模块化可以使我们的代码具有可复用性、高维护性、按需加载
    一个个模块就像是做房子的一块块砖一样
    

## 1. nodeJS中的模块分类
1. 内置模块:由nodeJS官方提供的,例如fs文件读写模块、path路径模块、http网络请求模块等
2. 自定义模块:由用户自己创建的js文件,导入的时候需要有相对路径
3. 第三方模块:由其他个人或公司开发的模块,然后上传到npm网站上的模块,使用前需要先安装。


## 2. node模块化
   
   node模块化遵循了commonJS的规范,一个文件是一个模块。
   模块导入 -- require
   模块导出 -- module.exports
   
```js
    //导出形式 默认值为一个空对象 {}
    module.exports = {
        '需要导出的对象'
        ...
    }
    //另一种导出形式
    exports.a = 2
```
>注意: 导出时,应始终以 module.exprts 导出的对象为准 
```js
    //导入形式
    const index = './index'
```
>node里面导入的时候,.js后缀名可以省略


## 3.npm与包
第三方模块也叫做“包”
一些常见的npm命令
```js
    //安装包
    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节点
```js
//安装指定的包,并记录到devDependencies节点中
npm i 包名 -D
npm install 包名 --save-dev
```

温故而知新:
1. 改变函数内部this指向的三种方法及区别
   ```
   改变函数内部this指向的三种方法分别是:call()、apply()、bind()
   fun.call(thisArg, arg1, arg2, …)  --call方法会直接调用函数,可以传递多个参数,常用于继承
   fun.apply(thisArg, [argsArray]) --也会直接调用函数,传递的参数要是一个数组,常用于数组
   fun.bind(thisArg, arg1, arg2, …) -- 只改变this指向一般都用bind
   ```
2. 说出迭代遍历数组,筛选数组,查找数组中是否有满足条件的元素这三种方法
    ```
    forEach()方法、filter()方法、some()
    ```
3. 说出闭包的定义及作用
    ```
    闭包:一个内部函数使用外部函数的变量,一般存在嵌套关系
    能够延长变量的生命周期,
    ```
4. 定义变量的几种方式分别是什么?有什么区别?
    ```
    var let const 
    var没有块级作用域,还有声明提升,存在很多缺陷
    let 有块级作用域 
    const 定义常量
    ```
5. flex布局主轴有哪几种排列方法
    ```
    justify-content: flex-start/flex-end/center/space-between/space-bround
    ```
6. 浅拷贝和深拷贝的区别
    ```
    浅拷贝只是把地址值复制过去了,一个的值发送变化,另一个也会跟着变化
    深拷贝不仅复制内容,也重新分配了一片内存空间
    ```
7. 防抖和节流的区别?如何实现防抖和节流?
    ```
      防抖:在一定时间内,频繁触发事件,只有最后一次生效。一定时间内触发事件,会让定时器重置计时。常用于input输入框。
      节流:减少事件的触发频率。常用于scroll、mousemover事件。
    ```
8. 什么是跨域?跨域有几种解决方法?
    ```
    请求的url的协议、域名、端口号与当前url的有任何一个不同,就发生了跨域
    常见的解决方式有:JSONP、CORS
    ```
9. 图片懒加载的原理
    ```
    把图片的src属性换成自定义的属性,通过判断页面的scrillTop()方法,动态设置src属性
    ```
10. 构造函数,原型对象,对象实例之间是怎样查询的?
    ```
        构造函数的显式原型等于原型对象的隐式原型
    ```
11. 三元表达式的用法是什么?
    ```
    条件判断式?值1 : 值2
    条件为true就是值1
    ```
12. 在Nodejs中如何拼接路径字符串?
    ```
    path.join(__dirname,'')
    ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值