ES6使用export和import实现模块化的方法


Posted in Javascript onSeptember 10, 2018

在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库,  而像seaJS是基于CMD规范的模块化库,  两者都是为了为了推广前端模块化的工具, 更多有关AMD和CMD的区别, 后面参考给了几个链接;

现在ES6自带了模块化, 也是JS第一次支持module, 在很久以后 ,我们可以直接作用import和export在浏览器中导入和导出各个模块了, 一个js文件代表一个js模块;

现代浏览器对模块(module)支持程度不同, 目前都是使用babelJS, 或者Traceur把ES6代码转化为兼容ES5版本的js代码;

前端模块化

1. 模块化的好处

前后端分离以来,经常提到前端工程化,前端工程化是一个高层次的思想,前端工程化主要包括四个方面:模块化、组件化、规范化、自动化。而模块化和组件化是为工程化思想下相对较具体的开发方式,因此可以简单的认为模块化和组件化是工程化的表现形式。

模块化带来的好处:

   1 避免变量污染,命名冲突
   2 提高代码复用率
   3 提高维护性
   4 依赖关系的管理

2. 什么是模块化?

那具体什么是模块化呢,还是举简单的例子,我们要写一个实现A功能的JS代码,这个功能在项目其他位置也需要用到,那么我们就可以把这个功能看成一个模块采用一定的方式进行模块化编写,既能实现复用还可以分而治之,同理在写样式的时候,如果我们需要某种特殊的样式,会在很多地方应用,那么我们也可以采用一定的方式进行CSS的模块化,具体说来,JS模块化方案很多有AMD/CommonJS/UMD/ES6 Module等,CSS模块化开发大多是在less、sass、stylus等预处理器的import/mixin特性支持下实现的,具体技术大家自行学习。

3. 没有ES6模块化之前是怎么表达模块化的?

在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库, 而像seaJS是基于CMD规范的模块化库, 两者都是为了为了推广前端模块化的工具

4. ES6的模块化

现在ES6自带了模块化, 也是JS第一次支持module,我们可以直接作用import和export在浏览器中导入和导出各个模块了, 一个js文件代表一个js模块;

ES6的模块化的基本规则或特点:

1:每一个模块只加载一次,每一个JS只执行一次,如果下次再去加载同目录下同文件,直接从内存中读取。

2:每一个模块内声明的变量都是局部变量, 不会污染全局作用域;

3:模块内部的变量或者函数可以通过export导出;

4:一个模块可以导入别的模块

5:ES6的模块自动采用严格模式

6:模块顶级作用域的this值为undefined

7:需要外部使用的部分,必须导出才可以

5.实际应用

// 普通的使用
  export var a = '1'
  export function sum(num1,num2){
    return num1+num2
  }
  
  import a from './a.js'
  import {sum} from './sum.js'
// 重命名导出与导入
  function sum(num1,num2){
    return num1+num2
  }
  export {sum as add}
  
  import {add as sum} from './sum.js'
  
// 模块的默认值

  export default function(num1,num2) {
    return num1 + num2
  }
  
// 在script标签中使用模块

  <script type="module" src="module.js"></script>
  <script type="module">
  import a from '../b.js'
  </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript入门教程(1) 什么是JS
Jan 31 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
Apr 22 Javascript
js使用递归解析xml
Dec 12 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
JS中关于事件处理函数名后面是否带括号的问题
Nov 16 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
JavaScript动态绑定详解
Sep 14 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
vue cli3适配所有端方案的实现
Apr 13 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 #Javascript
浅谈微信小程序flex布局基础
Sep 10 #Javascript
微信小程序文章详情页面实现代码
Sep 10 #Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 #Javascript
JavaScript读写二进制数据的方法详解
Sep 09 #Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 #Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 #Javascript
You might like
PHP4实际应用经验篇(2)
2006/10/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
也说JavaScript中String类的replace函数
2011/09/22 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
koa源码中promise的解读
2018/11/13 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
详解JS函数防抖
2020/06/05 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
python hash每次调用结果不同的原因
2019/11/21 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
开办化妆品公司创业计划书
2013/12/26 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫