ES6模块化
关于ES6模块化
历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。
在nodeJS中,有模块化的方法,使用CommonJS规范可以做到模块化,也就是说,只有在用js进行后端node开发的时候,才能使用模块化,前端js依然不行
在前端我们可以使用requireJS,seaJS来实现模块化,但是requireJS也是通过对script标签进行异步导入的方式来进行,并不是js里自带的语法
我们也可以使用webpack工具来进行模块化打包,是因为webpack跑在nodeJS中,说到底还是nodeJS中的模块化
但是在ES6中,我们第一次在js语法中加入了模块化的东西,目前很多浏览器都不支持,所以说还需要编译
ES6模块化的规范
模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
- 暴露
可以export直接暴露出某些对象,可以暴露多个:
//暴露多个接口 在定义的时候暴露
export let str = 'abcd'
export let fn = function(){
console.log('fn')
}
export let person = {
name:'二狗'
}
//暴露多个接口,在{}里放入要暴露的对象
export {str,fn,person}
因为直接暴露的对象在引入的时候名字不能改变,可能会导致在引入的模块中造成命名冲突
可以在暴露的时候通过as来定义别名
export {str as a_str,fn as a_fn,person as a_person}
在暴露对象的时候,如果只有一个,可以default暴露,在引入的时候叫啥都行,也不用加{}
export default fn
default只能暴露一个东西,如果我们有一个是defualt暴露的,还有几个是具名暴露
export default str
export {fn,person}
引入:
import abc,{fn,person} from './modules/module_a'//abc就是上面的str
导入
如果被引入的模块没有暴露,只是一段逻辑代码需要在引入模块里运行的话
import './modules/empty'
如果要导入某一个模块中暴露的一些对象的话,注意,不一定非要把其暴露的模块全部引入,导出的对象的名字不能错
import {str,fn,person} from './modules/module_a.js'
console.log(str,person)
fn()
在引入模块中暴露的接口的时候,很可能会产生命名冲突,依赖于在暴露的时候定义别名的话,也不是很安全,所以最好在引入的时候命名别名
import {str as a_str,fn as a_fn,person as a_person} from './modules/module_a.js'
如果要引入的模块暴露出来的对象有很多,我们在引入的时候可以放入到一个对象中去使用:
A对象不需要自己定义,引入的时候会自动创建
import * as A from './modules/module_a'
console.log(A)
ES6模块化的更多相关文章
- ES6模块化与常用功能
目前开发环境已经普及使用,如vue,react等,但浏览器环境却支持不好,所以需要开发环境编译,下面介绍下开发环境的使用和常用语法: 一,ES6模块化 1,模块化的基本语法 ES6 的模块自动采用严格 ...
- CommonJS、AMD、CMD和ES6模块化区别
本文参考自:https://www.cnblogs.com/chenguangliang/p/5856701.html 1.CommonJS NodeJS是CommonJS规范的实现,webpack ...
- javascript ES6模块化
一.将模块导出去 /* *将模块导出去 *a.js文件 */ const a=12; export default a; /* *将模块导出去 *b.js文件 */ const a=5; export ...
- ES6 模块化与 CommonJS 模块化
ES6 模块化 import命令用于输入其他模块提供的功能;export命令用于规定模块的对外接口. export 可以有多个,export default 仅有一个 a.js 模块a文件 导出多个方 ...
- ES6 模块化(Module)export和import详解 export default
ES6 模块化(Module)export和import详解 - CSDN博客 https://blog.csdn.net/pcaxb/article/details/53670097 微信小程序笔记 ...
- ES6模块化使用遇到的问题
前言 最近在学习ES6模块化时,遇到了一些问题,通过查询相关资料得以解决,本篇随笔详细记录了解决方法. 具体内容 以下定义一个模块common.js 在test.html中引入上述定义的模块 运行上述 ...
- ES6模块化深入 debug
引子: 2020.2.24.最近刚写完一个vue项目.项目用到ES6的模块化 想到之前写node项目用到过commonjs模块化 就想着把所有用到过的模块化技术 总结学习一下 在看阮一峰老师的 es6 ...
- 07 . 前端工程化(ES6模块化和webpack打包)
模块化规范 传统开发模式主要问题 /* 1. 命名冲突 2. 文件依赖 */ 通过模块化解决上述问题 /* 模块化就是把单独的一个功能封装在一个模块(文件)中,模块之间相互隔离, 但是可以通过特定的接 ...
- js 模块化的一些理解和es6模块化学习
模块化 1 IIFE 2 commonjs 3 浏览器中js的模块化 4 简单理解模块加载器的原理 5 es6 之前在参加百度前端技术学院做的小题目的时候,自己写模块的时候 都是写成立即调用表达式( ...
随机推荐
- JMeter性能测试,完整入门篇
1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,也越来越流行成为了主流的性能测试工具 ...
- MicroService.Core简易微服务框架《一、简介》
MicroService.Core MicroService.Core 的初衷是为了方便的创建一个微服务, 可作为 Windows Service 或者控制台模式启动. 它底层使用了 OWin 自托管 ...
- Treats for the Cows
Treats for the Cows Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64 ...
- THE MATRIX PROBLEM
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- aria-label
元素中的 aria-label用来命名一个元素 它的值可以是任何字符 读屏软件就会读出aria-label里的内容 <div role=”form” aria-labelledby= ...
- BOM对象
每一个frames都有自己的window对象,也就是每个frames都有自己的全局对象,它们之前是相互独立的,包括各自独立的本地对象,top.Object !== top.frames[0].Obje ...
- vue初级学习--组件的使用(自定义组件)
一.导语 突然冒出四个字,分即是合,嗯,优点道理....................... 二.正文 在搞的仿淘宝demo,之前加入购物车是与商品详情一块的,今天把它单独拆出来,复用性高点,那这样 ...
- WebP 的前世今生
除了视频,图片占据了 PC 和 App 的大部分流量,为运营方带来高额的成本支出,同时过多的图片加载会影响到网站与 App 的加载速度.因此在保证图片质量的前提下缩小图片的体积就成了迫在眉睫的事情. ...
- 【译】Asp.Net Identity Cookies 格式化-中英对照版
原文出处 Trailmax Tech Max Vasilyev: ASP.Net MVC development in Aberdeen, Scotland I've been reached out ...
- ABP框架个人开发实战(1)_环境搭建
前言 之前关注ABP框架有一阵子了,一直没有潜下心来实际研究一下.最近想自己建站,以后有自己的功能开发项目,可以在自己的站点上开发,并一步步的完善,所以找个比较好用的框架迫在眉睫,选来选去,决定用AB ...