pnpm安装依赖后Vue组件报找不到模块,咋回事?
我用 pnpm 装了个 UI 库,结果在 Vue 组件里 import 时直接报错说找不到模块,明明 node_modules 里有这个包啊?
试过删掉 node_modules 重装、清 pnpm 缓存都不行。用 npm 就没问题,是不是 pnpm 的软链接机制搞的鬼?
<script setup>
import { ElButton } from 'element-plus' // 这行报错:Module not found
</script>
<template>
<el-button type="primary">按钮</el-button>
</template>
首先你得检查项目根目录下的
.npmrc文件,确保没有设置shamefully-hoist=true,这个选项会让 pnpm 模仿 npm 的扁平化结构,反而会引发更多问题。然后在项目的
vue.config.js里加上这个配置:这段代码的作用是让 webpack 不要尝试去解析 pnpm 创建的符号链接,直接使用实际路径,避免模块找不到的问题。
另外还需要在
tsconfig.json(如果用 TypeScript 的话)或者jsconfig.json中加入:这里我们通过配置 paths 来告诉 TypeScript 或者 JavaScript 编译器,在解析模块时也去 pnpm 特有的存储路径里找。
需要注意的是,每次修改这些配置后最好重启开发服务器,有时候热更新可能不会生效。
我自己也被这个问题折腾过好几次,真是让人头疼。不过理解了 pnpm 的原理之后,处理起来就简单多了。希望这些建议能帮到你,至少不用再回退到 npm 去装包了吧。