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

TurboRepo Monorepo从Yarn转pnpm后遇mime类型声明缺失问题

在TurboRepo monorepo中从Yarn切换到pnpm后遇到TS7016类型声明错误

执行lint或build命令时出现如下错误:

../../node_modules/.pnpm/@types+serve-static@1.15.5/node_modules/@types/serve-static/index.d.ts:4:20 
- error TS7016: Could not find a declaration file for module 'mime'. 
'/path-to-project/node_modules/.pnpm/mime@3.0.0/node_modules/mime/index.js' implicitly has an 'any' type.

问题背景

排查发现依赖链中引入了已废弃的@types/mime(npm官方说明:mime自身已提供类型定义,此包为冗余存根)。Yarn环境下无此问题,新建pnpm+express项目也未复现该问题。

依赖链路径:

firebase-functions@4.8.2 --> @types/express@4.17.3 --> @types/serve-static@1.15.5 --> @types/mime@4.0.0

已尝试的操作:

  • pnpm store prune
  • 重新安装pnpm
  • 重新安装root/apps/project下的依赖包
  • 多次清理项目缓存、node_modules及.lock文件后重新安装所有依赖

使用的pnpm版本:v8.15.5

相关配置文件

root/apps/project/tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "strict": true,
    "target": "es2017"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}

root/apps/project/package.json

"dependencies": {
    "firebase-admin": "^12.0.0",
    "firebase-functions": "^4.8.2"
  },
  "devDependencies": {
    "event-dee-types": "workspace:*",
    "firebase-functions-test": "^3.1.1",
    "typescript": "^4.9.0"
  },

root/package.json

"dependencies": {
    "daisyui": "4.6.0",
    "dotenv-cli": "^7.2.1",
    "next": "latest",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/node": "^20.10.4",
    "@types/react": "^18.0.22",
    "@types/react-dom": "^18.0.7",
    "autoprefixer": "^10.4.14",
    "eslint": "^7.32.0",
    "eslint-config-custom": "workspace:*",
    "postcss": "^8.4.21",
    "sass": "^1.62.0",
    "tailwindcss": "^3.3.1",
    "turbo": "latest",
    "typescript": "^5.0.4"
  }

解决方案

1. 强制禁用冗余的@types/mime依赖

在项目根目录的package.json中添加pnpm.overrides配置,强制忽略@types/mime:

{
  "pnpm": {
    "overrides": {
      "@types/mime": "false"
    }
  }
}

或者将其映射到mime自身的包,确保使用内置类型:

{
  "pnpm": {
    "overrides": {
      "@types/mime": "npm:mime@^3.0.0"
    }
  }
}

2. 更新依赖版本

升级firebase-functions到最新版本,新版本可能已修复依赖链中引入过时类型包的问题;同时升级@types/express和@types/serve-static到兼容mime v3的版本,避免依赖旧类型定义。

3. 调整TypeScript配置

在root/apps/project/tsconfig.json的compilerOptions中添加types字段,明确指定需要加载的类型包:

{
  "compilerOptions": {
    // 原有配置...
    "types": ["node", "express"]
  }
}

作为临时方案,可启用skipLibCheck跳过库类型检查(不推荐长期使用):

{
  "compilerOptions": {
    // 原有配置...
    "skipLibCheck": true
  }
}

4. 调整pnpm依赖解析配置

在根目录的.npmrc或pnpmrc中添加如下配置,确保类型包被正确提升:

public-hoist-patterns[]=@types/*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:23:16