zoukankan      html  css  js  c++  java
  • 前端模块化

    1.前端模块化

    js模块化提供几种规范

    1.commonjs 规范 代表的就是  onde  适合后台开发 因为是同步的,服务器是运行比较快等待时间不长,common.js 不适合用于前端,前端客户端是浏览器,浏览器追求的是异步加载,浏览器不能等太长时间。

    2.前端模块的规范是  Amd  规范  代表的就是 requires,它是异步的,很多前端框架都是用的是  Amd 规范  比如  jquery  angular

    3.  第三个模块规范是  es6

    2.模块化的操作

    1.commonjs 的操作

    所有的模块化都是两个方向,暴露模块接口和引入模块

    module.exports={} 暴露本质是一个 exports 的对象

    require(路径)引入一个模块

    以上是后台的  在后台 node 可以直接运行,在客户端(浏览器)不能运行,需要对文件打包解析。

    打包工具:webpack gulp

    前端模块:不借用任何规范自己怎么写?

    自定义前端模块

    案例分析:

    定义一个feixiang模块没有任何依赖,在定义一个huiting模块,这个模块要依赖feixiang模块,然后再定义主文件 index.js 它依赖hiuting模块

    1.定义不依赖其它模块

    (function(){
    //    定义一个feixiang模块
        var name="hello 模块一"
        
        function getName(){
            console.log(name)
        }
    //    暴露模块,需要后面的所有js文件都能访问这个模块,唯一的方法,将该模块注册在window下
        window.feixiang={//暴露模块名字是feixiang
            getName:getName//这是暴露的属性
        }
    })(window)
    /*
     * 为什么加自调用函数?
     * 因为自调用函数执行会形成一个私有作用域,私有作用域对内部变量进行保护
     * 
     */

    2.定义依赖其它模块

    (function(window,feixiang){
        var name="1807 第二个模块"
        function show(){
            console.log(name)
        }
        function yilai(){
    //        这个方法来自于飞翔模块
    //        怎么引入?
            feixiang.getName()
        }
        console.log(feixiang.getName())
        //暴露会婷模块接口,等于暴露了两个接口
        window.huiting={
            show:show,
            yilai:yilai
        }
        
    })(window,feixiang)
    //将飞翔模块注入会婷模块里

    在主文件中引入这两个模块

    (function(window,huiting){
        huiting.show()
        huiting.yilai()
    })(window,huiting)

    HTML文件

    注意事项:

    1.依赖关系千万不能出错

    这种模块的缺点,会发送多次请求,但依赖关系不能放错顺序

    3.前端模块化规范 amd

    Amd 是前端模块的一种规范,全程 async module definition 异步模块加载机制,是一个规范(标准),所有需要按照这个规范去定义模块和使用模块

    1.require 提供了一个一个全局方法 叫 define() 用来定义模块

    定义模块分两种:

      1.不依赖其它模块

      2.依赖其它模块

    定义不依赖其它模块

    //如果不依赖其它模块 参数就是一个函数
    define(function(){
        var mod="我是mod1"
        
        function mod1(){
            return mod
        }
    //    return 暴露接口
        return{
            mod1:mod1
        }
    })

    定义依赖其它模块

    //定义mod2模块,依赖mod1模块
    define(["mm1","jquery"],function(mjiaozi,$){
    //    []数组就是这个需要依赖的模块
        function getMes(){//打印mod1里面数据
            console.log(mjiaozi.mod1())
            $("#div").css("background","red")
        }
        //暴露接口
        return{
            getMes:getMes
        }
    })

    如何使用这俩模块

    在主文件分两部分,一部分是配置模块,一部分使用模块

    //引入模块
    //第一对模块进行配置
        requirejs.config({
    //        baseUrl:"require",//配置查找到根目录
    //        配置模块名称,和路径.属性是模块名
            paths:{
                "mm1":"./module/mod1", //不能带后缀名,自己会默认后面有后缀名
                "mm2":"./module/mod2",
                "jquery":"./js/jquery-3.3.1"
            }
        })
    //第二对模块进行配置
        require(["mm2"],function(mod2s){
            mod2s.getMes()
        })
  • 相关阅读:
    微信读书分享组队群
    骚操作!利用百度首页换肤的图片上传 API 做图床
    application/json和application/x-www-form-urlencoded使用选择
    通过类名或者jar名查询所在jar包
    sql中with as测试实例
    BeanUtils.copyProperties的简单示例
    jquery.validate.js的简单示例
    springboot restful接口服务异常处理
    怎样判断某个窗口是否打开
    怎样理解window.name
  • 原文地址:https://www.cnblogs.com/jinfeixiang/p/11135032.html
Copyright © 2011-2022 走看看