美文网首页
五一前端专题三-模块化

五一前端专题三-模块化

作者: TinkleJane | 来源:发表于2020-05-05 13:18 被阅读0次

一个页面需要引入多个js文件问题:

  • 请求过多
  • 依赖模糊
  • 难以维护
    这些问题可以通过现代模块化编码和项目构建来解决

JS模块化进化史

1.函数堆积,全局污染
2.将数据/行为封装到对象中(命名空间),解决了命名冲突,不安全,变量可修改
3.闭包
4.IIFE增强模式

  • IIFE : 立即调用函数表达式--->匿名函数自调用
  • 编码: 将数据和行为封装到一个函数内部, 通过给window添加属性来向外暴露接口
  • 引入依赖: 通过函数形参来引入依赖模块
      (function(window, module2){
        var data = 'atguigu.com'
        function foo() {
           module2.xxx()
           console.log('foo()'+data)
        }
        function bar() {
           console.log('bar()'+data)
        }
        
        window.module = {foo}
      })(window, module2)

模块化的规范(关键是【拆】【合】)

1.CommonJs -唯一的双端JS规范

CommonJS 是一套规范,它的创建和核准是开放的。这个规范已经有很多版本和具体实现。
CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过 module.exportsexports 导出对外的变量或接口,通过 require() 来导入其他模块的输出到当前模块作用域中。
服务端实现: Node.js模块化

  |-modules
    |-module1.js
    |-module2.js
    |-module3.js
  |-app.js  //合并 node app.js
  |-package.json
    {
      "name": "commonJS-node",
      "version": "1.0.0"
    }

浏览器端实现: Browserify模块化

 |-js
   |-dist //打包生成文件的目录
   |-src //源码所在的目录
     |-module1.js
     |-module2.js
     |-module3.js
     |-app.js //应用主源文件
 |-index.html
 |-package.json
   {
     "name": "browserify-test",
     "version": "1.0.0"
   }

2.AMD

*AMD 定义了一套 JavaScript 模块依赖异步加载标准,来解决同步加载的问题。
* require.js
* 基本语法
* 定义暴露模块: define([依赖模块名], function(){return 模块对象})
* 引入模块: require(['模块1', '模块2', '模块3'], function(m1, m2){//使用模块对象})

3.CMD

  • sea.js
    • 基本语法
      • 定义暴露模块:
        define(function(require, module, exports){
          通过require引入依赖模块
          通过module/exports来暴露模块
          exports.xxx = value
        })
        
      • 使用模块seajs.use(['模块1', '模块2'])

4.ES6

  • 定义暴露模块: export
    默认暴露(暴露一个数据):
    export default 对象
    一般暴露(暴露多个数据):
    export const a = value1
    export let b = value2
    const c = value1
    let d = value2
    export {c, d}
    • 引入使用模块: import
      引入default模块:
      import xxx from '模块路径/模块名'
      引入一般模块
      import {a, b} from '模块路径/模块名'
      import * as module1 from '模块路径/模块名'
  • 使用Babel将ES6编译为ES5代码
  • 使用Browserify编译打包js

参考

最新的模块化 JavaScript 设计模式
详解JavaScript模块化开发
Javascript 模块化编程 - 阮一峰
https://zhaoda.net/webpack-handbook/commonjs.html

相关文章

  • 五一前端专题三-模块化

    一个页面需要引入多个js文件问题: 请求过多 依赖模糊 难以维护这些问题可以通过现代模块化编码和项目构建来解决 J...

  • 前端模块化(requirejs)

    前端模块化 什么是前端模块化 将代码依据不同功能,或者职责进行模块的划分,就称为前端模块化 模块化的好处 结构更轻...

  • webpack基础笔记

    webpack基础 1.前端工程化 实际的前端开发: 模块化:(js的模块化,css的模块化,资源的模块化) 组件...

  • 关于前端模块化开发

    关于前端模块化开发 1 前端中有哪些模块化开发的规范以及实现方案 2 模块化的开发的好处 3 CommonJS

  • 前端模块化

    什么是前端模块化? 前端为什么需要模块化? CommonJS、AMD、ES6、CMD区别是什么? 一、什么是模块化...

  • 认识Webpack

    要了解Webpack,首先要知道前端模块化开发的概念 前端模块化 模块化的目的是使代码可以重用,模块化在任何开发中...

  • 接触web前端需要注意什么?避免走上弯路

    初学Web前端要注意什么?如何学好JS模块化编程?JavaScript是前端三要素之一,也是很多初学Web前端的人...

  • 前端自动化构建工具,前端工程化,前端模块化,前端组件化

    前端自动化构建,前端工程化,模块化,组件化, 1:前端自动构建工具webpack等,是为了前端的规范化,模块化,提...

  • AMD_CMD_RequireJS

    为什么要使用模块化? 前端模块化开发的价值 参考 最主要的目的: 解决命名冲突 依赖管理 在前端工程潮流下,模块化...

  • web前端全栈开发进阶之路

    前端全栈精英开发班培训课程可以说是前端开发的集大成者,课程有十一个大的章节或者说是专题进行系统化、模块化的教学。同...

网友评论

      本文标题:五一前端专题三-模块化

      本文链接:https://www.haomeiwen.com/subject/zrddghtx.html