首页
/ Modern.js 项目构建问题排查指南

Modern.js 项目构建问题排查指南

2025-07-08 06:41:28作者:毕习沙Eudora

前言

Modern.js 是一个现代化的前端开发框架,它基于 Rsbuild 构建工具封装了自己的构建系统。在实际开发过程中,开发者可能会遇到各种构建相关的问题。本文将系统性地梳理 Modern.js 项目中常见的构建问题及其解决方案,帮助开发者快速定位和解决问题。

基础排查方法

1. 检查 Rsbuild 相关文档

Modern.js 内部基于 Rsbuild 构建工具,因此许多构建问题可以直接参考 Rsbuild 的官方 FAQ:

  • 功能相关问题
  • 异常错误问题
  • 热更新(HMR)问题

2. 清除构建缓存

当遇到奇怪的构建问题时,清除缓存往往是第一步:

rm -rf ./node_modules/.cache

Modern.js 默认将 webpack 缓存生成在 ./node_modules/.cache/webpack 目录下。

常见问题及解决方案

1. webpack 编译参数错误

错误现象:

TypeError: The 'compilation' argument must be an instance of Compilation

原因分析: 这通常是由于项目中安装了错误版本的 webpack 或多个 webpack 版本冲突导致的。

解决方案:

  1. 避免在项目中直接声明 webpack 依赖
  2. 统一项目中各依赖的 webpack 版本
  3. 尝试删除 lock 文件后重新安装依赖

2. Monorepo 中模块引用失败

错误现象:

You may need an additional loader to handle the result of these loaders.

原因分析: Modern.js 默认不会编译 node_modules 或当前项目目录外的文件。

解决方案:

  1. 启用源码构建模式
  2. 配置 source.include 指定需要额外编译的目录
  3. 预构建依赖的子项目

3. 运行时 exports is not defined 错误

原因分析: CommonJS 模块被 Babel 编译导致。

解决方案:

  1. 避免将 CommonJS 模块加入 Babel 编译
  2. 设置 Babel 的 sourceType 为 unambiguous
export default {
  tools: {
    babel(config) {
      config.sourceType = 'unambiguous';
    },
  },
};

4. 编译进度条卡住无报错

排查步骤:

  1. 检查 Babel 配置是否正确
    • 插件/预设名称是否正确
    • babel-plugin-import 配置是否正确
  2. 检查是否在编译大型 JS 文件
    • 可禁用 babel-plugin-styled-components
export default {
  tools: {
    styledComponents: false,
  },
};

5. webpack 缓存失效

排查方法: 添加调试配置查看缓存失效原因:

export default {
  tools: {
    webpack(config) {
      config.infrastructureLogging = {
        ...config.infrastructureLogging,
        debug: /webpack\.cache/,
      };
    },
  },
};

6. 引用 lodash 类型报错

错误现象:

The lodash method `DebouncedFunc` is not a known module.

解决方案: 使用 import type 明确导入类型:

import { debounce } from 'lodash';
import type { DebouncedFunc } from 'lodash';

高级调试技巧

查看最终 webpack/Rspack 配置

Modern.js 提供了 inspect 命令来查看最终生成的配置:

npx modern inspect

该命令会输出:

  • Builder 配置
  • Rspack 配置(web)

总结

本文梳理了 Modern.js 项目中最常见的构建问题及其解决方案。遇到构建问题时,建议按照以下步骤排查:

  1. 清除缓存尝试
  2. 检查是否有明显的配置错误
  3. 使用 inspect 命令查看最终配置
  4. 根据具体错误信息参考本文对应解决方案

通过系统性地理解和解决这些问题,开发者可以更高效地使用 Modern.js 进行项目开发。