es6学习:模块化

1. 模块化简介

     

       在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

      ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性。

      模块化是指将一个大的程序文件,拆分程许多小的文件,然后将小文件组合起来。类似于vue中的组件化。

    1.1 模块化的好处

  • 防止命名冲突(不同模块的相同变量名,重复不冲突)
  • 代码复用(把一个功能代码放在同一个模板里,向外暴露接口,可供给多个地方使用)
  • 高维护性(如果多人对代码修改,不会产生过度冲突;代码和模块升级只需对某一个或某些模块进行升级)

    1.2 模块块化规范产品

  • CommonJs  规范  =》 产品:   NodeJs、Browerify
  • AMD  规范  =》 产品:    requireJS
  • CMD  规范  =》 产品:    seaJS

    1.3 ES6模块块语法

      模块功能主要由两个命令构成:exportimport 。在引入模块时script要写type="module",不然会报错哦,Uncaught SyntaxError: Cannot use import statement outside a module。

  • export 命令用于规定模板块对外接口
  • import 命令用于输入其他模块的对外接口
// module.js
export let test = 'test'

export function add (a, b) {
  return a + b
}

// xxx.html  导出的module变量为object类型  script的type要写type="module"
// 引入moudle.js文件
import * as module from './模板化/module.js'
let testAdd = module.add(23, 56)
console.log(module, testAdd, typeof module)
 

      此例为分别暴露的方法,除此之外还有统一暴露和默认暴露。默认暴露需要调用module.default.add(12, 54)

// 统一暴露
let test = 'test'
function add (a, b) {
  return a + b
}

export { test, add }

// 默认暴露
export default {
  test: 'test',
  add: function (a, b) {
    return a + b
  }
}

2. ES6 引入模块方式

  • 通用引入方式
import * as module from './模板化/module.js'
  • 解析赋值形式(如果不同模板的变量名重复,可以通过as进行设置变量别名)
import {add, test} from './模板化/module.js'
import {add as add2, test as test2} from './模板化/module2.js'
console.log(add, test)
console.log(add2, test2)

  • 默认暴露的引入(一定要另起别名,方便区分,否则报错。输出m1,没有了default)
import {default as m1} from './模板化/module.js'

  • 简便模式(只针对于默认暴露)
import m3Default from './模板化/module.js'

3. 浏览器中模块化的使用

// xxx.html 引入入口模块文件app.js
<script src="./js/app.js" type="module"> </script>

// app.js
import * as m1 from './js/module1.js'
import * as m2 from './js/module2.js'

// module1.js
.....

// module2.js
.....

4. 模块化在项目中的使用

      babel

    4.1 安装工具 babel-cli   babel-preset-env(预设包)   browserify(打包工具)

      过程:①初始化 ②安装

    4.2 通过 npx  babel  需转化文件的路径   -d   转化后存放的路径   参数

    4.3 打包 npx browserify 需要打包的文件目录  -o  打包后存放到的文件目录

      dist目录下会多一个bundle.js文件。打包后的文件格式。

5. 实例:通过npm 引入juqery包的流程

    5.1 在终端中通过npm i jquery命令安装jquery

    5.2 在js中引入jquery并使用(app.js中,通过import引入)

import $ from 'jquery'
$('body').css('background', 'pink')

    5.3 需要重新安装工具(更新依赖)和打包

    5.4 在html中引入打包后的bundle.js文件,并打开网页看效果。

<script src="../dist/bundle.js" type="text/javascript" charset="utf-8"></script>

 


下一篇进入ES7-11的学习 ... ...

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值