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

    不使用模块化
    1、util.js 封装了一个getFormatDate函数
    2、a-util.js 封装了一个aGetFormateDate函数,这个函数使用了utils.js中的getFormatDate
    3、a.js 使用了a-util.js中的aGetFormateDate
    util.js
    function getFormatDate(date, type){
      if(type === 1) {
        return '2017-06-15'
      }
      if(type === 2) {
        return '2017年6月15日'
      }
    }

    a-util.js

    function aGetFormatDate(date) {
      return getFormatDate(date, 2);
    }

    a.js

    var dt = new Date();
    console.log(aGetFormatDate(dt))

    index.html

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
      </head>
      <body>
        <script src="util.js"></script>
        <script src="a-util.js"></script>
        <script src="a.js"></script>
      </body>
    </html>

    *:

    1、util.js,a-util.js,a.js三个js顺序不能放错,一放错就用不了
    2、这些代码中的函数必须是全局变量,才能暴露给使用方,全局变量污染。很容易被冲掉,难找bug
    3、a.js执导引用a-util.js。但是他不知道a-util.js还需要依赖于util.js
    使用模块化-AMD
    util.js的方法吐出传给我就好,不用暴露给全局
    util.js
    define(function() {
      var util = {
        getFormatDate: function(date, type){
          if (type === 1) {
            return '2017-06-20'
          }
          if (type === 2) {
            return '2017年6月20日'
          }
        }
      }
      return util;
    });

    a-util.js

    // 依赖于util.js,返回util
    define(['./util.js'], function(util) {
      var aUtil = {
        aGetFormatDate: function(date) {
          return util.getFormatDate(date,2);
        }
      }
      return aUtil;
    });

    a.js

    define(['./a-util.js'], function(aUtil) {
      var a = {
        printDate: function(date) {
          console.log(aUtil.aGetFormatDate(date))
        }
      }
      return a;
    });

    main.js

    require(['./a.js'], function(a){
      var date = new Date();
      a.printDate(date);
    })

    index.html

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
      </head>
      <body>
        <p>AMD test</p>
        <script data-main='./main.js' src="https://cdn.bootcss.com/require.js/2.3.3/require.min.js"></script>
      </body>
    </html>

    *:

    1、https://requirejs.org/
    2、全局define函数
    3、全局require函数。 只有define后,才能被require
    4、依赖的js会自动,异步加载
    5、直接引入a.js就行。其他的根据依赖关系自动引用
    6、那两个函数,没必要做成全局变量,不会带来污染和覆盖



    模块化-CommonJS
    nodejs模块化规范,现在被大量前端使用
    1、前端开发依赖的插件和库,都可以从npm中获取
    2、构建工具的高度自动化,使得使用npm的成本非常低
    3、commonjs不会异步加载js,不像amd那样,而是同步一次性加载出来,他不需要异步,因为他不需要从服务器拉取文件,他直接就是在服务器上运行
    util.js
    module.exports = {
      getFormatDate: function(date, type){
        if (type === 1) {
          return '2017-06-15'
        }
        if (type === 2) {
          return '2017年6月15日'
        }
      }
    }

    a-util.js

    var util = require('./util.js');
    module.exports = {
      aGetFormatDate: function(date){
        return util.getFormatDate(date, 2);
      }
    }
    AMD和CommonJS的使用场景
    1、需要异步家在JS,使用AMD
    2、使用了npm之后建议使用CommonJS
    模块化-ES Module
    1、语法:import export (注意有无default)
    2、环境:babel编译es6语法,模块化可用webpack和rollup



    总结:
    一开始没有模块化,需要什么写什么,需要什么引用什么。当然是很不好,通过发展,有一套前端工程化的体系
    1、AMD成为标准,require.js(也有cmd)
    后来有一个require.js这么个东西,前端可以通过一些语法定义,通过define,require这些函数的语法定义,完成模块化的编写。所以require,AMD慢慢成为一个标准,什么是标准,就是他的出现一统江湖,用的人多了,就成为一个标准。比如就用define这个函数,就用require这个函数。define里面有什么参数,返回什么,定义好了之后就成为一个标准。
    后来也有cmd。cmd的标准在社区里面用的基本没有了
    2、前端打包工具,是的,nodejs模块化可以被使用
    3、ES6出现,想统一现在所有模块化标准
    4、nodejs积极支持,浏览器尚未统一
  • 相关阅读:
    Testlink & Redmine组合拳演练
    使用IP欺骗Loadrunner并发测试小结
    程序设计的思想与执行步骤参考
    读《世界是自己的,与他人无关》
    读《A4纸上的奇迹》
    读《流动的盛宴》
    既往不恋,当下不杂,未来不乱——读《怦然心动的人生整理魔法》
    GridCtrl学习笔记(3)一行一行地更新表格,有bug版
    GridCtrl学习笔记(2)寻找自动更新表格的最新数据并把其显示到当前窗口的方法
    GridCtrl学习笔记(1)建立使用GridCtrl的工程
  • 原文地址:https://www.cnblogs.com/wzndkj/p/10947432.html
Copyright © 2011-2022 走看看