es模块 导入 导出

62 阅读1分钟

英文全称

es: ecma script

来源

es6引入的

作用

标准化,规范化,模块化

命名导出

// 声明时,直接导出

export const PI = 3.14159

export function greet(name) {
  return `Hello, ${name}!`
}
// 先声明,后导出

const PI = 3.14159

function greet(name) {
  return `Hello, ${name}!`
}

export { greet, PI }

导入命名导出的模块

import { greet, PI } from "./module.js"

console.log(greet(PI)) // Hello, 3.14159!

默认导出

// 声明时直接导出
export default function greet(name) {
  return `Hello, ${name}!`
}
// 先声明,后导出
function greet(name) {
  return `Hello, ${name}!`
}

export default greet
// 默认导出,可以省略名称
export default function (name) {
  return `Hello, ${name}!`
}

导入默认导出模块

import greet from "./greet.js"

console.log(greet("3.1415"))

总结

命名导出

适用有多个功能的模块

  • 可以导出多个值,并且可以选择性导入,灵活性更好
  • 指定了确切的名字,便于代码追踪和维护

默认导出

适用功能单一的模块

  • 简化了单个值的导入和导出,可以让代码更加简洁

同时使用

// 导出

export const PI = 3.14159

export default function greet(name) {
  return `Hello, ${name}!`
}

// 导入

import greet, { PI } from "./greet.js";

使用 as 关键字

功能: 用于重命名导入或导出的值

使用场景: 解决名称冲突、适应当前上下文,提高可读性

在 import 中使用 as

// 假设 greet1.js 中 greet 函数是命名导出
import { greet as sayHello } from "./greet1.js"

// 假设 greet2.js 中 greet 函数是默认导出
import { default as sayHello } from "./greet2.js"

// 将 module.js 中的所有导出内容聚合到 module 对象中
import * as module from "./module.js"
console.log(module.greet("3.1415"))

在 export 中使用 as

function greet(name) {
  return `Hello, ${name}!`
}

export { greet as sayHello }

// 将 greet 函数作为默认导出
// 和`export default greet`效果一样
export { greet as default }

重新导出

import { greet } from "./module1.js"
export { greet }

import { sayHello } from "./module2.js"
export { sayHello }

// 使用 export ... from ... 语法
export { greet } from "./module1.js"
export { sayHello as sayHi } from "./module2.js"

export { default } from "./module3.js"
// 重命名之后,其它模块需要以命名导出的方式来导入 module3
export { default as Module3 } from "./module3.js"

动态导入

impor("./module.js").then((module) => {
  console.log(module.greet("3.1415"))
})

const module = await import("./module.js")
console.log(module.greet("3.1415"))