SSF0SSF0
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
  • HTML

    • html1
    • html2
  • CSS

    • Flex 布局常见问题与解决方案
  • JavaScript

    • 数据类型及引用问题
    • 处理 Blob 类型文件下载问题总结
    • localStorage 与 sessionStorage 区别
    • JavaScript 中的 script 标签问题详解
    • JavaScript 中的`this`指向问题详解
    • SessionStorage踩坑记录:它真的能"只设置一次"吗?
    • 动态加载 JS 脚本方法对比
    • 浏览器页面关闭场景下的数据上报
  • es6

    • Promise
    • es6 模块导出方式全解析
  • Vue2

    • created VS mounted 发起异步请求
    • vue2-2
  • Vue3

    • Vite + Vue3 修改 element-plus 源码
    • Vue v-if 与 v-show
    • Vue3 ref 获取组件
    • Vue3 路由传参
    • 父子组件与组件里 Hooks 加载顺序
    • 第三方组件传入参数TS提示
    • Vue3 Props 在 Hooks 中的响应性处理
    • Vue Router 的两种历史模式及部署配置详解
    • 在Vue 3项目中顺利集成Tailwind CSS的完整指南
    • Vue 3 深度选择器:deep()完全指南
  • Electron

    • 快速构建 electron + vue3 项目
  • TS

    • TS 泛型
    • 记录模板使用断言的问题
    • type 与 interface
  • WebPack

    • Webpack 介绍
  • Vite

    • Vite CLI 常见命令
    • vite 与 webpack 比较
  • 项目工程

    • 前端代码风格
    • Vue3 项目规范
    • npm 镜像问题
    • 包管理工具
    • 使用 engines 限制开发环境依赖
    • 打包与shell交互指定模式
    • 使用 pnpm 构建 Monorepo 实战指南
    • pnpm 修改依赖源码打包报错
  • 记录一下小程序
  • 控制浏览器正确保存网站账号密码的技巧

es6 模块导出方式全解析

在 TypeScript/JavaScript 项目中,模块导出是代码组织的关键环节。本文将详细讲解各种导出方式的语法、用途和最佳实践。

1. 基本导出类型

命名导出

// 直接导出声明
export const name = "张三";
export function greet() {
  return "你好";
}

// 先声明后导出
const age = 25;
function sayHello() {
  return "你好";
}
export { age, sayHello };

// 重命名导出
const userAge = 30;
export { userAge as age };

导入方式:

import { name, greet, age, sayHello } from "./module";

默认导出

// 直接默认导出
export default function () {
  return "默认函数";
}

// 先声明后默认导出
const config = { host: "localhost" };
export default config;

导入方式:

import anyNameYouWant from "./module";

2. 重新导出(Re-export)

重新导出命名导出

// 完整写法
import { feature1, feature2 } from "./features";
export { feature1, feature2 };

// 简写形式
export { feature1, feature2 } from "./features";

// 重命名重新导出
export { feature1 as mainFeature } from "./features";

// 全部重新导出
export * from "./features";

重新导出默认导出

// 将其他模块的默认导出作为当前模块的默认导出
export { default } from "./logger";

// 将其他模块的默认导出作为命名导出
export { default as logger } from "./logger";

// 将其他模块的命名导出作为默认导出
import { mainFeature } from "./features";
export default mainFeature;
// 或简写为
export { mainFeature as default } from "./features";

3. 混合导出

// 同时使用默认导出和命名导出
const mainFunction = () => "主函数";
export default mainFunction;
export const helper = () => "辅助函数";

// 导入方式
import mainFunction, { helper } from "./module";

4. 常见模式和最佳实践

索引文件(barrel file)模式

在index.ts中收集和重新导出多个模块:

// features/index.ts
export { feature1 } from "./feature1";
export { feature2 } from "./feature2";
export { default as mainFeature } from "./mainFeature";

// 使用时简化导入
import { feature1, feature2, mainFeature } from "./features";

API 包装模式

将第三方库重新包装并导出:

// wrappers/logger.ts
import originalLogger from "third-party-logger";

// 可以添加自定义功能
const enhancedLogger = {
  ...originalLogger,
  customLog: (msg) => originalLogger.log(`[自定义] ${msg}`),
};

export default enhancedLogger;

服务导出模式

// services/api.service.ts
export class ApiService {
  // 实现...
}

// services/index.ts
export { ApiService } from "./api.service";
export { UserService } from "./user.service";

5. 各导出方式对比

导出方式语法导入方式最适用场景
命名导出export const ximport { x }多个相关功能
默认导出export default ximport x单一主要功能
重新命名导出export { x as y }import { y }API 适配
全部重新导出export * from "./x"import { any }模块集合
默认重新导出export { default }import x转发模块
混合导出混合使用上述import x, { y }复杂模块

6. 推荐实践

  1. 接口和类型使用命名导出

    export interface User {
      name: string;
    }
  2. 主要功能类使用默认导出

    export default class UserService {
      /* ... */
    }
  3. 工具函数使用命名导出

    export function formatDate() {
      /* ... */
    }
  4. 简化导入路径使用 index 文件

    // index.ts
    export * from "./validation";
    export * from "./formatting";
  5. 保持命名一致性

    导入时尽量不重命名,保持代码可读性。

总结

选择合适的导出方式可以显著提高代码的可读性和可维护性。默认导出适合模块的主要功能,命名导出适合辅助功能和多功能模块。重新导出则是组织大型项目的有效工具。

在实际项目中,根据模块的用途和复杂度灵活选择导出方式,同时保持团队代码风格的一致性。

最后更新时间:
贡献者: 何风顺
上一页
Promise