0
点赞
收藏
分享

微信扫一扫

JavaScript模块化

Gascognya 2022-04-04 阅读 152

文章目录

JavaScript 模块化

模块化的优势
1.防止命名冲突 每个es模块都有独立的私有作用域
2.代码复用
3.高维护性

CommonJS 服务于服务器 => NodeJS、Browserify
ES6模块化 服务于服务器和浏览器

ES6的模块化

依赖模块需要编译打包处理,比如ES6->ES5

ES6模块化的设计思想使尽量静态化,使得编译时就能确定模块的依赖关系,以及输入输出的变量。

模块功能主要由两个命令构成

  • export 命令用于规定模块的对外接口
  • import 命令用于输入其他模块提供的功能

ES Module 模块说明

  1. 我们只需要给script标签加上一个属性type=module,那么该script就是一个es模块
  2. 每个es模块都有独立的私有作用域
<script type="module" scr="请求的模块路径必须是支持跨域的">
 const a = '111'
 console.log(a)
</script>

<script type="module">
 const a = '222'
 console.log(a)
</script>
/*
输出111
输出222
*/
  1. es模块是通过跨域的方式请求外部js模块,所以请求的该js模块必须是支持跨域的
<script type="module" scr="请求的模块路径必须是支持跨域的"></script>
  1. es模块的script脚本会相对与普通的script脚本会延迟执行
<script type="module">
  console.log('我是ESM script')
</script>
<script>
  console.log('我是普通script')
</script>
/*
输出我是普通script
我是ESM script
*/

export命令与

一个模块就是一个独立的文件,该文件内部的所有变量,外部无法获取。
如果想获取可以使用export命令。

分别暴露和统一暴露使等价的,优先考虑统一暴露,可以很清楚输出了哪些变量

//分别暴露
export let name = "ranan";
export let fun = function(){};
//统一暴露
let name = "ranan";
let fun = function(){};
export {name,fun}; //注意{}不是对象的意思是特定的语法

//默认暴露 这里的{},是一个对象
export default {
   name : "ranan" ,
   fun : function(){}
}

export不支持直接导出变量和值,下面是错误的

const name = 'aaa'
export name // 导出变量
export 'aaa' // 导出值

import命令

//通用引入 将所有输出的变量放在m1对象中,采用m1.xx的方式使用
import * as m1 from  './xxx'
/*
统一暴露或分别暴露,这里的{}也是特定语法
并且{ }内的变量名称需要和export导出的变量名称相同
*/
import {name,fun} from './xxx'
//默认暴露的写法,必须要写别名,因为default是关键字
import {default as data} from "path" 
//简便形式 针对默认暴露
import data from "path"
console.log(data) //输出{name : "ranan" ,fun : functio(){}}

说明

  1. 可以单独把引入写在一个js里面,然后引入该js,注意script标签需要添加type=module“属性
  2. 如果引入npm包import x from '包名'
  3. 在一个文件或模块中,export、import 可以有多个,export default 仅有一个
  4. import 导入的路径可以是绝对路径、相对路径和完整的链接,但不可以省略./后缀

动态import加载

实现懒加载/按需加载,使用import()函数,返回值是promise对象,pormise返回的成功值就是暴露的对象。

import(path).then(data => data.xx)

as关键字 重命名

一般情况下,export输出的变量就是本来的名字,但是可以使用as 关键字进行重命名

export {name as n1,fun as n2,fun as n3}

同一个变量可以用不同的名字进行输出

举报

相关推荐

0 条评论