ES6模块化

模块化

ES6模块化原理

使用闭包封装了私有变量和方法,暴露一个接口供其他部分调用

<script>
    
    let module = (function(){
        const moduleList = {};
        function define(name,modules,action) {
            modules.map((m,i) => {
                modules[i] = moduleList[m]
            })
            moduleList[name] = action.apply(null,modules);
            console.log(moduleList);
        }
        return {define}
    }());
    /* 名字 是否依赖 动作 */
    /* 导出  通过返回出一个接口来调用*/
    module.define('tools',[],function(){
        return {
            first(arr) {
                return arr[0]
            },
            max(arr,key) {
                return arr.sort((a , b) => b[key] - a[key])[0];
            }
        }
    });
    /* 依赖 */
    module.define('lesson',['tools'],function(tools){
        let data = [{
            name:'js',
            pice: 199
        },{
            name: 'msq',
            price: 78
        }]
        console.log(tools.max(data,"price"));
    })
</script>
模块化的使用
  1. 加上type = 'module'
  2. 只有开放的才能被使用
  3. 通过利用export,开放出口,导出
  4. 利用import导入
<script type="module">
    import { title ,show} from "./tools.js";
    show();//123
</script>

/*导出*/
let title = 'houdun';
let show = function() {
    console.log(123);
}
export {title , show}

模块会延迟解析,只解析一次

每个模块都有自己的独立作用域,只通过export来暴露端口

批量打包
import * as api from "/tools.js";
api.show()

返回的api是对象,通过api.show来访问

别名使用

只能有一个名字!

导入
import { title as t} from "./tools.js";

用as操作符来设置别名

导入

也是通过as来设置

默认导出

只能有一个,可以用任何的别名来接收

export default class User {
    
}
/*实际原理是导出是设置别名为default*/
混合导入导出

带花括号是具名导出,不带花括号是默认导出

模块的合并导出

通过将所有的模块引入到一个index模块中,最后再一次导出index模块

为了避免导出现多个模块中有重复命名的问题,将每个模块通过批量导出的方法,引入到index中,原理就是批量导出返回的是对象,每个对象有不同的名字实现了差异化

按需动态加载

利用import只能放在顶层,不能放在花括号当中,所以无法实现按需加载的功能

var btn = document.querySelector('button');
btn.addEventListener('click',() => {
import("/tools.js").then(({title,show}) => {
    show();
})
})

利用import函数返回一个promise对象,通过对象下的then方法来实现

最近在写css的过程中,发现代码越来越多,了解了一下模块化的概念,记了一些比较基础的东西,但是还是有很多地方需要及时补充的,比如对于css文件的打包问题等,继续学习吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丞同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值