模块化
模块化在这个学习过程的位置如上:
JS没有模块化时会产生的问题:
1.经常容易造成全局变量的污染
2.容易发生JS的依赖混乱
模块化的标准
1.CommonJS 社区标准
2.ES Module 官方标准
CommonJS
Common JS 规范:
1.所有的js文件均是一个模块,运行的模块入口模块
2.所有的模块中的全局变量、函数,均不会产生污染
3.当一个模块需要提供一些东西给别的函数使用时,需要把这些东西「导出」
4.当一个模块需要用到别的模块的东西的时候,需要「导入」(模块路径必须以/或./开头)
5.模块有缓存,第一次运行模块后,导出结果会被缓存,之后再使用该模块,直接使用缓存结果
标准类型:社区规范
支持环境:node
依赖类型:动态依赖
Common JS 导出和导入
导出:
1 | module.export = 导出的值 |
导入:
1 | require("模块路径")//函数返回模块导出的值 |
Common JS例子:
config.js:
1 | module.exports = { |
delay.js:
1 | module.exports = delay; |
main.js:
这个是主入口
1 | const config = require('./config'); |
print.js:
1 | const config =require('./config'); |
以上 CMJS 模块化程序实现了给定延迟的输出文章的每个字符,这样做的好处是便于维护和修改。
ES Module
标准类型:官方标准
支持类型:node,浏览器
依赖类型:静态依赖,动态依赖
ES Module导出和导入
导出:
一个模块可以同时存在两种导出方式,最终会合并为一个【对象】导出
注意:导出代码必须为顶级代码,即不可放到代码块中
1 | 一、export const a=l;//具名,常用 |
导入:
针对具名导出和默认导出,有不同的导入语法:
1 | //仅运行一次该模块,不导入任何内容 |
1 | //导入属性a、b,放到变量temp1、temp2中 |
动态导入例子:
因为返回的是一个Promise对象,所以也可以用下面这种形式动态导入处理
练习
书写一个ESM模块,查阅文档,导出下面的模块对象
1 | { |
你可以写出多少种导出的方式?
再书写一个ESM模块,查阅文档,导入上面的模块对象,你可以写出多少种导入的方式?
导出的方式
1 | export const a = 1; |
1 | export default{ |
1 | const a = 1; |
导入的方式
1 | import {a} from "./test.js"; |
1 | import c from "./test.js" |
1 | import * as test from "./test.js" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我在看着你!