前端模块化发展

前端模块化的发展

 CommonJS的模块化实现

 但是应用到项目中需要node技术支持解析

 ES6的模块化实现

模块化

概述

Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其 他都可以加载别人已经写好的模块。 但是,Javascript不是一种模块化编程语言,它不支持"类"(class),包(package)等概念,更遑论"模 块"(module)了

最早,我们是这么写代码的:

function foo () {
    // ... 
}

function bar () {
    // ... 
}

这样很容易导致全局命名冲突。那定义一个对象,不放到全局中不就好了吗,这就是 Namespace 模式。

var MYAPP =  {
  foo: function () {},
  bar: function () {}
}

MYAPP.foo()

这样全局变量虽然少了,但本质了是个对象,是可以操作修改的,这样很不安全。

函数是 JavaScript 唯一的 LocalScope,函数外部是修改不了函数内部代码的。所以相对来说是安全的。这就是 IIFE 模式。

// 利用闭包
var Module = (function () {
  var _private = 'safe now'
  var foo = function () {
    console.log(_private) 
  }
  
  // 暴露接口
  return {
    foo: foo 
  }
})()

开发中往往会依赖第三方库,这时候就要引入依赖。例如依赖于 jQuery 时,就要将 jQuery 引入。

var Module = (function ($) {
  // 使用 jQuery
  var _$body = $("body")
  var foo = function () {
    console.log(_$body)
  }
  
  return {
    foo: foo
  }
  // 引入 jQuery
})(jQuery)

Module.foo()

这就是模块模式,也是现代模块实现的基石。

模块化可以降低单个文件的复杂度,降低偶合度,使文件更好维护。当文件分离后可以按需加载,提高了复用性。并且每个模块都是一个独立的作用域,避免了命名冲突。

但是这样就引发了一个问题:文件分离导致需要发送更多的 HTTP 请求,并且使模块与模块之间的依赖变得模糊。

模块化规范就可以通过依赖关系来合并文件,现在有主流的 CommonJS、AMD、CMD、ES6 四种规范。

CommonJS模块化

CommonJS使用 exports 和require 来导出、导入模块

const sum = function(a,b){
 return parseInt(a) + parseInt(b)
}
const subtract = function(a,b){
 return parseInt(a) - parseInt(b)
}
//导出
module.exports = {
 sum: sum
}
//简写
module.exports = {
 sum
}


//引入模块,注意:当前路径必须写 ./
const m = require('./四则运算.js')
const result1 = m.sum(1, 2)
console.log(result1)

ES6模块化

使用 export 和 import 来导出、导入模块

因为ES6的模块化无法在Node.js中执行,需要用Babel编辑成ES5后再 执行

第一种

export function getList() {
 console.log('获取数据列表')
}
export function save() {
 console.log('保存数据')
}

//只取需要的方法即可,多个方法用逗号分隔
import { getList, save } from "./userApi.js"
getList()
save()

第二种

export default {
 getList() {
 console.log('获取数据列表2')
 },
 save() {
 console.log('保存数据2')
 }
}
import user from "./userApi2.js"
user.getList()
user.save()

CMD和AMD模块规范

详情

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序三两行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值