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

    webpack 和 rullup都是打包工具:

      webpack倾向于应用程序的打包

      rollup更适合在文件打包方面,例如 jq库, vue代码库等

    模块化是模块编程思想的体现,在开发环境中,通过本地启用server方式的开发;例如 nodejs

    在浏览器环境中是不能直接支持的 或者 存在兼容问题,这需要一个打包工具使打包后的代码可以在浏览器环境中良好运行。(打包成静态代码)

    模块化的核心:

      1. 独立的作用域

      2.导出模块内的数据  (模块数据的输出)

      3.引入模块内的数据  

      2和3合起来是模块数据的导出和利用

    commonJS 规范

      核心:

        独立作用域:  一个文件是一个模块  (通过直接读取硬盘文件实现,如Nodejs通过文件系统实现)

        导出模块内的数据: module.exports 或 exports 导出数据  ---> 每个文件都有一个 module 对象,导出的数据挂载在上面

        引入模块内的数据: let a  = require("./a.js");   --->  引入的是导出的数据

      对比:

        数据:

          后端同步加载,文件系统;

          web ajax 异步加载

        nodeJS 文件系统、I/O操作及net操作等在浏览器中无法实现

     (此规范无法在浏览器中实现,只有另外制定了一套规范);

    WEB模块化规范:

      AMD UMD ESM

    CMD 叫做通用模块定义规范(Common Module Definiton),它是类似于 CommonJs 模块化规范,但是运行于浏览器之上的

      淘宝玉伯的 SeaJS 库

      CMD 规范拥有简单、异步加载脚本、友好的调试并且兼容 Nodejs

      define(function(require, exports, module) {
        var a = requrie("./a");
          module.exports = { 
              a: 1,
          b: a   };   });

    AMD  异步模块定义 

      requireJS库   (开发需要有服务端环境才能运行)  define定义模块  require引入模块 

      引入代码库:  <script data-main="./main.js" src="./vendors/require.js"></script>   ---> 是独立与浏览器之外的,server

      data-main: 项目的入口文件名字路径, 当 requirejs 库加载完后会自动加载入口文件;(head中会自动通过 script 标签 引入入口文件)
    模块的定义:
        define()方法定义模块,
          define({a:1, b:2, c:3}) ---> 可以是直接一个对象,导出的是一个对象
          define(function(){ return obj }) ---> 通过回调函数 必须有 return
     数据的导出:

        同模块的定义
    数据的引入:
        静态引入:define(["./a","./b"],function(a,b){ console.log(a, b)})     依赖前置
        动态引入: define(function(requrie){ let a = require("./a"); console.log(a) }); 需要时require
     模块的配置:require.config 方法
         require.config({
            paths: {
                jquery: 'jquery.min'
            }
          }); 

    UMD : 通用模块定义规范(Universal Module Definition)

        同一个 JavaScript 包运行在浏览器端、服务区端等(符合多端规范)

        (它没有自己专有的规范,是集结了 CommonJs、CMD、AMD 的规范于一身)

      ((root, factory) => {
          if (typeof define === 'function' && define.amd) {
              //AMD
              define(['jquery'], factory);
          } else if (typeof exports === 'object') {
              //CommonJS
              var $ = requie('jquery');
              module.exports = factory($);
          } else {
              root.testModule = factory(root.jQuery);
          }
      })(this, ($) => {
          //todo
      });

    ESM

      es6 module : 静态加载,export 和 export 不能出现在判断等动态语句

             获取的是模块接口的引用(模块内数据发生改变,接口引用数据也会改变)

             commonjs中获得的是接口运行结果的缓存
             es6 module内部自动采用严格模式

    =====================没有从语言层面上根本解决模块化问题(独立作用域、默认严格模式)=================================================

      

  • 相关阅读:
    OAccflow集成sql
    集成备注
    CCflow与基础框架组织机构整合
    Jeecg_Jflow整合记录
    Problem opening .cshtml files
    The document cannot be opened. It has been renamed, deleted or moved.
    js中!和!!的区别及用法
    hdu 4757 Tree(可持久化字典树)
    Tomcat 学习进阶历程之Tomcat架构与核心类分析
    BZOJ 3000(Big Number-Stirling公式求n!近似值)
  • 原文地址:https://www.cnblogs.com/baota/p/12381401.html
Copyright © 2011-2022 走看看