深入理解ES6-13.模块

68 阅读2分钟

导入导出的基本语法

导出

使用 export 关键字可以将代码暴露给其他模块,它可以放在任何变量、函数、类声明或者引用的前面。

// 导出声明
export function test1(num){return num*4}

// 导出引用
function test2(num){return num*4}
export {test2}

导入

使用 importfrom 关键字导入其他模块的功能。

// 导入一个
import { name1 } from './example.js'
// 导入多个
import { name1, name2} from './example.js'
// 导入全部
import * as example from './example.js'
example.name1

导入的路径需要加上扩展名,例如这里的.js

注意点

  1. 导入和导出的语句必须在其他语句和函数之外使用,否则会报错。
  2. 通过 import 导入的变量、函数、类都是只读不可修改的。

CommonJs

es6 之前也是有一些模块加载方案的,比如 CommonJsAMD 之类的,nodeJsWebpack 中使用的是 CommonJs

//导出
exports.test1 = function test1(num){return num*4}
//导入: 不需要写扩展名
let {test1} = require('./example')

一般情况下不要混用不同模块加载方案的写法,虽然你这么写很多打包工具也支持也会生效。

导入导出重命名

as 关键字重命名导出模块的名称。

导出

function sum(num1, num2){return num1+num2}
export { sum as add }

导入

// 将 add 重命名为 myAdd
import { add as myAdd } from './example.js'

导入导出默认值

导出

一个模块只能设置一个默认的导出值,多次使用 default 关键字会报错。

// 用法1
export default function(num1, num2){return num1+num2}
// 用法2
function sum(num1, num2){return num1+num2}
export default sum
// 用法3
function sum(num1, num2){return num1+num2}
export { sum as default }

导入

导入默认值的时候不必再加大括号,标识出导入的名字了。

// 用法1
import anyName from './example.js'
// 用法2
import { default as anyName } from './example.js'

导入导出小用法

重新导出导入

import {sum} from './example.js'
export {sum}

导入 sum 后马上又导出,可以简化为一句,使用 export from

export {sum} from './example.js'

无绑定导入

当我们在一个模块中改变的是全局作用域中的内容时,我们并不想导入什么具体的模块,只想导入一个模块让其执行一下,就可以使用无绑定导入。

// 向 Array 这个内建对象上添加了一个 pushAll 方法
Array.prototype.pushAll() = function() {...}
// 导入时就向 Array 上添加了 pushAll 方法
import './example.js'

在Web浏览器中使用模块

script 标签中,当 type="module" 时,支持加载模块。

<script type="module" src="./test1.js"></script>

当使用 type="module" 时自动应用了 defer 属性,立即下载但直到文档被完全解析之后才被执行,会按照书写的顺序去执行。

导入路径规范

  1. 以 / 开头:从根目录开始
  2. 以 ./ 开头:从当前目录开始
  3. 以 ../ 开头:从父目录开始
  4. URL格式

只有以上四种写法时生效的,其他无效。