ES6模块import、export

js 本身不支持模块化

在ES6之前,js社区制定了一些模块化的规范

     Commonjs 规范          主要用于服务器端    nodeJs   require("url")

     AMD  规范                   客户端。代表性的框架:requireJs,curIJs

     CMD规范                     客户端。代表性框架:seaJs           

ES6出来,它统一了服务端和客户端的模块规范 

   语法统一: import { xxx }  aaa

下面看一下ES6模块化的玩法 

定义模块-导出-export

     模块化,一般都是js文件,用 export 导出文件,语法 :  export   导出的东西
       方式1:export  const A = 123
       方式2:export {  
            A,
            AA as BB    // 起别名        
       }

      方式3:export default  30

┌── module        // 模块文件夹
│   ├── a.js      // 模块文件 a
│   ├── b.js      // 模块文件 b
│   ├── c.js      // 模块文件 c
│   ├── d.js
│
├── index.html    // 主页面

-----------------------------------------------------------------------------------------------
a.js 文件
方法1:单个导出
export const A1 = 1
export const A2 = 11
export const A3 = 111

方法2:对象导出
const A1 = 1
const A2 = 11
const A3 = 111
export{
    A1,
    A2,
    A3
}
-----------------------------------------------------------------------------------------------
b.js 文件
方法3:别名导出(给导出的变量起别名)
const B1 = 2
const B2 = 22
const B3 = 222
export{
    B1 as B,
    B2 as BB,
    B3 as BBB
}
-----------------------------------------------------------------------------------------------
c.js 文件
方法4:对应下面 导入方法4
export default 20     

-----------------------------------------------------------------------------------------------
d.js 文件
方法5:多种格式导出,对应导入方法5,多种格式接受导入
export const D1 = 3
export const D2 = 33
export default 20  

使用模块-导入-import

注:导入外部模块,一定要在 script 标签里面使用,并且声明 script  type 类型为module

<script type="module"></script>

一定要服务器环境下运行

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>ES6模块化化</title>
    </head>
    <body>
         <h1>一定要在服务器环境中运行,否则报跨域错误</h1>
    </body>
    </html>
<script type="module">
    方式1:正常导入
    import { A1, A2, A3 } from "./module/a.js"
    import { B, BB, BBB } from "./module/b.js"
    console.log( A1,A2,A3 )  // 1 11 111
    console.log( B,BB,BBB )  // 2 22 222

-----------------------------------------------------------------------------------------
    方式2:别名导入(导出可以起别名,导入同样可以起别名)
    import { A1 as A, A2 as AA, A3 as AAA } from "./module/a.js"
    console.log( A,AA,AAA )  // 1 11 111

-----------------------------------------------------------------------------------------
    方式3:
    import * as mode from "./module/a.js"
    console.log( mode )  // {A1:1, A2:11, A3:111}

-----------------------------------------------------------------------------------------
    方式4:只适用于 export default 方式导出的东西
    import C from "./module/c.js"
    console.log( c)  // 20

-----------------------------------------------------------------------------------------
    方式5:对应 d.js 方式导出的东西
    import d, { D1, D2 } from "./module/d.js"
    console.log( d,D1,D2 )  // 20 3 33

-----------------------------------------------------------------------------------------
    方式6:按需加载,动态引入模块,可以写在if 语句中,路径也可以接受变量
    let path = "./module/a.js";
    import(path).then(res=>{
        console.log( res )  // { A1:1, A2:11, A3:111 }
    })
</script>

import特点:

    1.import 可以是相对路径,也可以是绝对路径

    2.import 无论引入多少次,模块只会导入一次,且实时更新的(模块数据后续更改了,主页面数据也会自动修改)

    3.import "./module/a.js"  相当于把整个文件引入

    4.import { A as AA }  from  "./module/a.js"          ---起别名导入

    5.import 有提升效果,会自动提到程序最前端首先执行

    6.import() 类似 node 里面的 require,可以动态的引入模块,返回的是一个promise对象。可以结合promise 和 异步函数使用

注:在ES6模块化中,自动默认就是严格模式 “use strict”,所以写代码的时候要遵循js语法的严格模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值