You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在基于TypeScript与Craco的React项目中支持mjs扩展名文件

解决Craco + React + TS项目无法识别.mjs文件的方案

TS2307错误本质是两个层面的配置缺失:TypeScript不认.mjs模块、底层webpack解析规则未覆盖.mjs后缀,按以下三步修改即可:

1. 调整TypeScript配置

打开项目根目录的tsconfig.json,修改对应配置项:

{
  "compilerOptions": {
    // 保留原有配置,新增/修改以下两项
    "moduleResolution": "Bundler", // TS 5.x以上推荐,低版本可替换为NodeNext
    "allowJs": true
  },
  "include": [
    "src",
    "**/*.mjs" // 新增此行,让TS扫描所有.mjs文件
  ]
}

如果修改后仍报类型错误,在src目录下新建global.d.ts文件,添加全局类型声明:

declare module '*.mjs' {
  const content: any;
  export default content;
}

2. 修改Craco的webpack配置

打开根目录的craco.config.js,在原有配置基础上新增webpack规则(原有Tailwind相关配置无需改动):

module.exports = {
  // 你原有配置(比如style、postcss等Tailwind相关配置)保留,新增以下webpack配置
  webpack: {
    configure: (webpackConfig) => {
      // 把.mjs加入优先解析的后缀列表
      webpackConfig.resolve.extensions = ['.mjs', ...webpackConfig.resolve.extensions];
      // 添加mjs文件处理规则
      webpackConfig.module.rules.push({
        test: /\.mjs$/,
        // 处理第三方包的mjs就填/node_modules/,处理自己写的mjs就填/src/,不需要限制就删掉include字段
        include: /node_modules/,
        type: 'javascript/auto'
      });
      return webpackConfig;
    }
  }
}

3. 重启服务验证

修改完后删除node_modules/.cache目录清空缓存,重新启动npm start,引入.mjs文件时记得写全后缀(比如import main from './main.mjs'),即可正常识别。

内容的提问来源于stack exchange,提问作者Wajahat Zia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 23:12:00