什么是模块化
模块化:一个大文件拆分成若干的小文件,能通过特定语法组合到一起实现的过程
- 优点
a.利于维护
b.更好的复用性
node中,规定每个js文件都是一个小模块
模块的分类
自定义模块
nodejs中,创建的js文件都是自定义模块
内置模块
安装node之后,自带很多内置模块,可以直接加载使用
第三方模块
其他人编写的模块,发布到npm上,可以下载使用
自定义模块
概述
每个创建的js文件都是自定义模块,并具有模块作用域,也就是当前模块创建的变量,函数等等只能在当前模块中使用
使用
导出:module.exports 导出内容
module 是 node中的一个全局对象,对象包含当前模板的详细信息
module.exports 是模块的出口,就是导出内容用的,默认值是{}
导入:如果要使用导出的内容,使用require()加载
let 值 = require('模块路径')
导出什么就得到什么
内置模块
内置模块是node.js自带的一套基本的api,也叫做核心模块
path模块
path是node本身提供的api,专门用来处理路径
使用:加载模块 let path = require('path')
方法:获取文件的后缀名 path.extname('.a/b.js') //js
文件名拼接 path.join('a','b','c') a/b/c
获取路径名 path.dirname('.a/b.htm') .a
获取绝对路径 __dirname //当前文件的绝对路径
// 接收传递的数据
// let {num,name,fn} = require('./01-test')
// console.log(num,name,fn);
// path 是 Node 本身提供的 API,专门用来处理路径。
const path = require('path')
// console.log(path);
const url='.ab/name.wxml'
// 获取文件的后缀名
console.log(path.extname(url));
const a='abc'
const b='dsd'
// 文件名拼接,可以智能拼接路径
console.log(path.join(a,b,'c'));
console.log(path.join('a','b','../c'));
// dirname 获得目录名
console.log(path.dirname(url));
//__diname 获得绝对路径
console.log(__dirname);
console.log(path.join(__dirname,'user.js'));
fs模块
可以实现对文件,文件夹的操作
使用:加载模块 const fs = require('fs')
方法:读取文件 fs.readFile('文件路径',编码格式',(报错返回,数据返回)=>{}')
异步写入文件 writeFile('路径名','需要写入的内容',回调函数//返回报错)
let fs=require('fs')
//readFile 读取文件
fs.readFile('02.js','utf8',(err,data)=>{
if(err){console.log(err); return } //err是报错信息,当报错时打印报错信息,并退出
console.log(data);
})
//异步写入文件
fs.writeFile('02.js','let shi="hhhh"',(err)=>{
if(err){console.log(err);}
})
ES6模块
用法:在package.json的根节点添加 “type”:“module”
语法:默认导出和导入
默认导出:export default 默认导出的数据
默认导入:import 接收名称 from '模块路径'
注意事项:每个模块中,只允许使用一次
按需导入和按需导出
按需导出:export const s1=10
按需导入:import{按需导入的名称} from '路径名'
注意事项:按需导入的名称和按需导出的名称要一致,
按需导入时,可以使用as关键进行重命名,
按需导入可以和默认导入一起使用
直接导入(无导出)
执行导入模块的代码 import 路径名
//默认导入
import a from './03.es6-export.js'
console.log(a); //obj
// 按需导入 {导入值 as 别名}
import { dd as ss } from './03.es6-export.js';
console.log(ss); //dd
//直接导入 会执行导出的语法
// import './03.es6-export.js'
宏任务与微任务
javeScript 是单线程的,同一时间只能执行一个任务
任务分为同步任务和异步任务
同步任务:不需要等待可立即查看执行结果
异步任务:异步任务需要等待一定的时候才能看到结果,比如setTimout,网络请求
事件循环
简介:是一个“JavaScript 引擎等待任务” “执行任务”和“进入休眠状态等待更多任务”这几个状态之间装换的无限循环
引擎的一般算法:1.当有任务时:从最先进入的任务开始执行
2.没有任务时,休眠直到有任务,然后执行第一步
任务队列
判断同步异步--->同步----立即执行同步代码---->结束完毕
| 进 --------------------------- --- |
| 入
| |
--->异步---->任务栈---->判断微任务还是宏任务---->微任务---->微任务完成----->
<script>
// 异步代码 宏任务
setTimeout(function () {
console.log(2);
}, 0);
// promise 是异步的
const p1= new Promise(function (resolve,reject) {
resolve(10)
})
p1.then(function (data) {
console.log(data);
})
// 同步代码
console.log(1);
// 1 10 2
// script 宏任务-里面的代码执行完 同步先执行
</script>