ES6模块之export和import教程

一、ES6中的模块
ES6中的模块即使一个包含JS代码的文件,在这个模块中所有的变量都是对其他模块不可见的,除非我们导出它。ES6的模块系统大致分为导出(export)和导入(import)两个模块。

二、导入的具体使用

场景1:只想导入源模块的部分内容
假设a.js是以如下方式导出的

// a.js
export var num = 100
export var name = ‘王小明‘

那么如果我们只需要a模块的num,就应该按下面的方式导入它

// b.js
import {num} from ‘./a.js‘
console.log(num) // 100

此处的模块导入利用了ES6的解构方式

场景2:不满意源模块所导出的变量或方法的名称,想要为它们另起名称
假设a.js中有一个名称如此晦涩的变量gddhauabsg

// a.js
export var gddhauabsg = 100

忍不住想要重命名这个变量的名称,但是又无权或不想修改源模块的话,那么不妨这么做

// b.js
// 如此,我们就可以在b.js中愉快的使用num了
import {gddhauabsg as num} from ‘./a.js‘
console.log(num) // 100

场景3:想要把源模块的所有导出都导入进来,但偏偏源模块不是以export default方式导出的
假设a模块将每个变量都单独,且声明时立即导出

// a.js
export var num = 100
export var name = ‘王小明‘

那么我们就要这样导入a的所有导出

// b.js
import * as moduleA from ‘./a.js‘
console.log(moduleA.num)  // 100
console.log(moduleA.name) // ‘王小明‘

解释一哈:*代表源模块(除去export default)的所有导出的集合,该集合类似Object类型,*就相当于{num: 100, name: ‘王小明‘},所以在源模块没有使用export default导出时,我们就可以使用上面的方式导入源模块的所有导出

场景4:源模块并没有对外暴露任何导出
a模块没有导出任何内容

// a.js
var arr = [1, 2, 3]
for (var i = 0;i < arr.length;i++) {
    console.log(arr[i])
}

那么b文件将a.js文件整个引入就好了

// b.js
// 此处会执行a.js的所有代码逻辑
import ‘./a.js‘

那么有些童鞋可能会有个疑问“这种导入方式的应用场景在哪?”,不知道大家是否听过‘腻子脚本‘这一概念,就是一些第三方脚本或工具,作用类似于补丁,用于兼容一些新特性或功能,在一般情况下,这些脚本或工具只需要自执行,并且通常都是在我们的业务代码之前引入

三、导出的具体使用
ES6模块的导出方式大致有两种:命名导出、默认导出;

场景1:源模块怎样才能支持命名导入和命名空间导入?

// a.js
// 方式1:在源模块末尾集中导出(当导出较多时,推荐此方式,方便管理导出)
var num = 100
var name = ‘王小明‘
var flag = true
export {
    num,
    name,
    flag
}

// 方式2:声明时立即导出(当导出较少时,推荐此方式)

export var num = 100
export var name = ‘王小明‘
export var flag = true

场景2:导出的内容前后名称需要不一致,那么我们可以尝试重命名
什么意思呢?如果源模块的开发者有下面这种想法时,就应该使用重命名导出:‘我想要提高代码的可读性且有较好的语义化,此时变量或方法的名称长度一定不会太短,类似getOrderInfoFromDatabaseByHttp这种命名,但又不想让使用我的模块的人觉得我的导出名称过长’,示例如下:

// a.js
// 名称真的好长
var getOrderInfoFromDatabaseByHttp = function () {
    // ...
}
export {
    // 如果没有重命名,就会导出下面这一大串
    // getOrderInfoFromDatabaseByHttp
    // 但如果使用了重命名,方法的名称就会变得很简洁,即getOrderInfo
    getOrderInfoFromDatabaseByHttp as getOrderInfo
}

场景3:模块功能单一,并且只需要导出值,不需要具名,使用默认导出export default

// version.js
export default ‘v1.0.0‘
// index.js
import version from ‘./version.js‘

上面的代码功能很简单,只是导出项目的版本号,所以我们应该使用默认导出,而没有必要像下面这样写:

// version.js
export var version = ‘v1.0.0‘
// index.js
import {version} from ‘./version.js‘ 不需要加花括号

原文地址:http://blog.51cto.com/9161018/2336455

时间: 2024-08-30 01:38:22

ES6模块之export和import教程的相关文章

ES6 模块定义 export 与 import

一般导出 export math.js export function* getFibo() { let a = 1; let b = 1; yield a; yield b; while (true) { let next = a + b; a = b; b = next; yield next; } } export function add(a,b) { return a+b; } index.js 注意:如果导出模块没有default定义,那么 引用 导出模块的时候必须有 {} ,标红部

es6(六):module模块(export,import)

es6之前,社区模块加载方案,主要是CommonJS(用于服务器)和AMD(用于浏览器) 而es6实现的模块解决方案完全可以替代CommonJS和AMD ES6模块设计思想:尽量静态化,在编译时就能确定模块的依赖关系,以及输入输出的变量 而CommonJS和AMD模块,都只能在运行时确定这些东西 同时:模块中使用的是严格模式 <script type="module" src="es7-1.js" ></script> <script

ES6中的export以及import的使用多样性

模块功能主要由两个命令构成:export和import.export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能. 一.export导出模块使用部分的几种方式 一个模块就是一个独立的文件.该文件内部的所有变量,外部无法获取.如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量.下面是一个 JS 文件,里面使用export命令输出变量. (1)利用default做接口导出 var a=1; export default a; export de

探索 模块打包 exports和require 与 export和import 的用法和区别

菜单快捷导航: CommonJS 之 exports和require用法 ES6 Module 之 export 和 import 用法 CommonJS和ES6 Module的区别 循环依赖 和 解决办法 模块打包原理简析 1.CommonJS 之 exports和require用法 CommoneJS规定每个文件是一个模块.将一个JavaScript文件直接通过script标签引入页面中,和封装成CommonJS模块最大的不同在于:前者的顶层作用域是全局作用域,在进行变量及函数声明时会污染全

module.exports,exports,export和export default,import与require区别与联系

还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: module.exports和exports是属于CommonJS模块规范!(不清楚commonjs?大神请这边逛一逛commonjs规范) export和export default是属于ES6语法(不清楚ES6?大神请这边逛一逛ES6模块)! 同样import和require分别属于ES6和Common

module.exports,exports,export和export default,import与require区别与联系【原创】

还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: module.exports和exports是属于CommonJS模块规范!(不清楚commonjs?大神请这边逛一逛commonjs规范) export和export default是属于ES6语法(不清楚ES6?大神请这边逛一逛ES6模块)! 同样import和require分别属于ES6和Common

ES6模块的import和export用法总结

ES6之前以前出现了js模块加载的方案,最主要的是CommonJS和AMD规范.commonjs前者主要应用于服务器,实现同步加载,如nodejs.AMD规范应用于浏览器,如requirejs,为异步加载.同时还有CMD规范,为同步加载方案如seaJS. ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案. ES6模块主要有两个功能:export和import export用于对外输出本模块(一个文件

ES6模块的import和export用法

ES6之前已经出现了js模块加载的方案,最主要的是CommonJS和AMD规范.commonjs主要应用于服务器,实现同步加载,如nodejs.AMD规范应用于浏览器,如requirejs,为异步加载.同时还有CMD规范,为同步加载方案如seaJS. ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案. ES6模块主要有两个功能:export和import export用于对外输出本模块(一个文件可以

ES6中export , export default , import模块系统总结

最近在学习使用Webpack3的时候发现,它已经可以在不使用babel的情况下使用ES6的模块加载功能了. 说到ES6的模块加载功能,我们先复习一下CommonJS规范吧: 一  . CommonJS规范规定,在每个模块内的module变量代表当前模块.这个变量的module.exports属性是对外开放的接口. 加载某个模块,其实是加载此模块的module.exports属性. exampleA.js var x = 5; var addX = function (value) { retur