logo
  • 指南
  • 配置
  • 插件
  • API
  • 示例
  • 社区
  • Modern.js 2.x 文档
  • 简体中文
    • 简体中文
    • English
    • 开始
      介绍
      快速上手
      版本升级
      名词解释
      技术栈
      核心概念
      页面入口
      构建工具
      Web 服务器
      基础功能
      路由
      路由基础
      配置式路由
      数据管理
      数据获取
      数据写入
      数据缓存
      渲染
      服务端渲染(SSR)
      服务端流式渲染(Streaming SSR)
      渲染缓存
      静态站点生成(SSG)
      渲染预处理 (Render Preprocessing)
      样式开发
      引入 CSS
      使用 CSS Modules
      使用 CSS-in-JS
      使用 Tailwind CSS
      HTML 模板
      引用静态资源
      引用 JSON 文件
      引用 SVG 资源
      引用 Wasm 资源
      调试
      数据模拟(Mock)
      网络代理
      使用 Rsdoctor
      使用 Storybook
      测试
      Playwright
      Vitest
      Jest
      Cypress
      路径别名
      环境变量
      构建产物目录
      部署应用
      进阶功能
      使用 Rspack
      使用 BFF
      基础用法
      运行时框架
      扩展 BFF Server
      扩展一体化调用 SDK
      文件上传
      跨项目调用
      优化页面性能
      代码分割
      静态资源内联
      产物体积优化
      React Compiler
      提升构建性能
      浏览器兼容性
      配置底层工具
      源码构建模式
      服务端监控
      Monitors
      日志事件
      指标事件
      国际化
      基础概念
      快速开始
      配置说明
      语言检测
      资源加载
      路由集成
      API 参考
      高级用法
      最佳实践
      自定义 Web Server
      专题详解
      模块联邦
      简介
      开始使用
      应用级别模块
      服务端渲染
      部署
      集成国际化能力
      常见问题
      依赖安装问题
      命令行问题
      构建相关问题
      热更新问题
      已下线功能
      📝 编辑此页面
      上一页环境变量下一页部署应用

      #构建产物目录

      本章节主要介绍构建产物的目录结构,以及如何控制不同类型产物的输出目录。

      #默认产物目录

      下面是最基础的产物目录结构,默认情况下,构建产物会生成在当前项目的 dist 目录下。

      dist
      ├── static
      │   ├── css
      │   │   ├── [name].[hash].css
      │   │   └── [name].[hash].css.map
      │   │
      │   └── js
      │       ├── [name].[hash].js
      │       ├── [name].[hash].js.LICENSE.txt
      │       └── [name].[hash].js.map
      │
      └── html
          └── [name]
              └── index.html

      最常见的产物是 HTML 文件、JS 文件和 CSS 文件:

      • HTML 文件:默认输出到 html 目录。
      • JS 文件:默认输出到 static/js 目录,
      • CSS 文件:默认输出到 static/css 目录。

      此外,JS 文件和 CSS 文件有时候会生成一些相关产物:

      • License 文件:包含开源许可证信息,默认输出到 JS 文件的同级目录,并添加 .LICENSE.txt 后缀。
      • Source Map 文件:包含保存源代码映射关系,默认输出到 JS 文件和 CSS 文件的同级目录,并添加 .map 后缀。

      在产物的文件名称中,[name] 表示这个文件对应的入口名称,比如 index, main。[hash] 则是基于该文件的内容生成的哈希值。

      #修改产物目录

      Modern.js 提供了多个配置项来修改产物目录和产物名称,你可以:

      • 通过 output.filename 来修改产物的文件名。
      • 通过 output.distPath 来修改产物的输出路径。
      • 通过 output.legalComments 来修改 License 文件的生成方式。
      • 通过 output.sourceMap 来移除 Source Map 文件。
      • 通过 html.outputStructure 移除 HTML 产物对应的文件夹。

      #静态资源

      当你在代码中引用图片、SVG、字体、媒体等类型的静态资源时,它们也会被输出到 dist/static 目录下,并根据静态资源类型来自动分配到对应的子目录:

      dist
      └── static
          ├── image
          │   └── foo.[hash].png
          │
          ├── svg
          │   └── bar.[hash].svg
          │
          ├── font
          │   └── baz.[hash].woff2
          │
          └── media
              └── qux.[hash].mp4

      你可以通过 output.distPath 配置项将这些静态资源统一输入到单个目录下,比如输出到 assets 目录:

      export default {
        output: {
          distPath: {
            image: 'assets',
            svg: 'assets',
            font: 'assets',
            media: 'assets',
          },
        },
      };

      上方的配置会生成以下目录结构:

      dist
      └── assets
          ├── foo.[hash].png
          ├── bar.[hash].svg
          ├── baz.[hash].woff2
          └── qux.[hash].mp4

      #扁平化产物目录

      有时候你不想产物目录有太多层级,可以将目录设置为空字符串,使生成的产物目录扁平化。

      参考下方的例子:

      export default {
        output: {
          distPath: {
            js: '',
            css: '',
            html: '',
          },
        },
        html: {
          outputStructure: 'flat',
        },
      };

      上方的配置会生成以下目录结构:

      dist
      ├── [name].[hash].css
      ├── [name].[hash].css.map
      ├── [name].[hash].js
      ├── [name].[hash].js.map
      └── [name].html

      #产物不写入磁盘

      默认情况下,Modern.js 会将构建产物写入磁盘,以方便开发者查看产物的内容,或是配置静态资源的代理规则。

      在开发环境,你可以选择将构建产物保存在 Dev Server 的内存中,从而减少文件操作产生的开销。

      将 dev.writeToDisk 配置项设置为 false 即可:

      export default {
        dev: {
          writeToDisk: false,
        },
      };