ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

IDEA 运行 Vue 项目常见问题:Node 版本、依赖安装与代理配置

IDEA 运行 Vue 项目常见问题:Node 版本、依赖安装与代理配置 在 IDEA 里跑一个 Vue 前端项目听起来是点几下的事但真上手你会发现卡住人的从来不是 Vue 本身而是 IDEA 和前端工具链之间那层说不清道不明的摩擦。我这几年带过几批新人也在几个前后端同仓的项目里长期用 IDEA 写 Vue见过太多场景项目拉下来IDEA 右下角进度条转十分钟终端敲下npm install之后满屏红字好不容易装完了启动又报端口占用页面打开了样式还是错的。这里面绝大多数问题跟代码写得对不对一点关系都没有全部出在环境、版本、配置和 IDEA 自己的行为习惯上。这篇内容就围绕在 IDEA 里把 Vue 项目跑起来这条主线把我在实际项目里踩过的坑、摸出来的排查顺序、以及各种参数该怎么定完整讲一遍。不管你是刚学 Vue 的新手还是已经写了几年后端、被迫接手一个 SpringBoot Vue 项目的老手都能从里面找到能直接抄的配置和能少走弯路的经验。1. 为什么在 IDEA 里跑 Vue 反而更容易出问题1.1 IDEA 跑前端到底图什么先说清楚一件事如果只是想跑个 Vue 项目看效果用 VS Code 加一个终端就足够了启动快、内存占用低、前端插件生态也更契合。那为什么还有那么多人坚持在 IDEA 里搞答案很现实——大多数这么干的人手里不是一个纯前端项目而是一个前后端放在同一个 Git 仓库里的工程比如xxx-admin下面同时挂着backendSpring Boot和frontendVue。这种结构下前后端联调要频繁改接口地址、看日志、切分支、提交代码来回切两个编辑器的时间成本非常高。IDEA 的好处就在这里同一个窗口里Java 代码有完整的编译、断点、热部署支持Vue 那边也有语法高亮、跳转、Git 变更管理甚至可以在一个提交里同时把后端的 Controller 和前端的 api 文件一起提上去不用来回同步。代价也是真实的。IDEA 本质是个 JVM 上跑的重型 IDE它的索引机制是为 Java 那种强类型、编译型语言设计的放到node_modules这种动辄几万个小文件、几千层目录的前端依赖树面前就会表现得非常吃力。我实测过一个中等规模的 Vue 3 项目node_modules有大概四万多个文件如果 IDEA 把它整个纳入索引范围第一次打开项目光建索引就要七八分钟内存占用直接冲到 3GB 以上同时 CPU 一直跑在 100%。这不是 IDEA 不好而是它的默认策略不适合前端项目你得手动告诉它这个目录你别管。另外还有一层隐性摩擦IDEA 自带的 Terminal 在不同的操作系统上默认 shell 不一样。Windows 上默认是 PowerShell而 PowerShell 有脚本执行策略限制很多前端的 npm 脚本、husky 钩子、shelljs 写的构建脚本在里面会莫名其妙失败报一个无法加载文件 ... 因为在此系统上禁止运行脚本。这个坑我在三个不同的团队里都遇到过每次都要重新解释一遍。所以在 IDEA 里跑 Vue你真正要处理的其实是三件事版本的匹配、IDEA 的行为定制、以及 shell 环境的差异。1.2 打开项目之前先把目录结构看清楚我见过太多人拿到项目压缩包直接 IDEA 里 File → Open然后就开始装依赖装到一半报错才回头问这个项目要什么版本。正确的顺序是反过来的先别打开 IDEA先用文件管理器或者命令行把项目根目录扫一遍看几个关键文件。第一个是package.json。重点看三处scripts里到底叫dev还是serveVue CLI 生成的老项目通常是vue-cli-service serve挂在serve上Vite 项目一般是vite挂在dev上还有用 Nuxt 的会是nuxt dev名字不对你敲命令就是一句Missing scriptengines字段有没有限制 Node 版本依赖里有没有node-sass、sass-loader这种对 Node 版本极其敏感的包。老项目里出现node-sass基本就意味着你要把 Node 版本压到 16 甚至 14因为node-sass4.x 系列根本不支持 Node 18。第二个是构建工具的配置文件。有vue.config.js说明是 Vue CLI内部是 webpack有vite.config.ts或vite.config.js说明是 Vite。这两个体系的差异非常大不只是启动速度的问题——代理写法不同webpack 用devServer.proxyVite 用server.proxy环境变量前缀不同Vue CLI 用VUE_APP_Vite 用VITE_静态资源基准路径的字段名也不同publicPath对base。很多人改代理改半天不生效就是因为照着 Vite 的文档改了 webpack 项目。第三个是锁文件和版本声明文件。有package-lock.json就用 npm有yarn.lock就用 yarn有pnpm-lock.yaml就用 pnpm这个尽量别自作主张换。还有.nvmrc或.node-version里面往往写着一个具体版本号比如18.16.0这是项目维护者留给你的最重要线索。把这些看清楚再打开 IDEA后面至少能省掉一半的排查时间。2. 环境准备Node、包管理器和 IDEA 侧配置2.1 Node 版本是整个链条里最容易出事的一环前端项目跑不起来我统计下来的第一原因就是 Node 版本不匹配没有之一。这件事麻烦的地方在于它不会给你一个清晰的版本不对提示而是抛出一堆看起来毫不相关的错误可能是node-sass编译失败可能是Error: error:0308010C:digital envelope routines::unsupported可能是某个依赖内部报SyntaxError: Unexpected token ?。背后逻辑其实不难理解。Node 每个大版本都会升级 V8 引擎、内置模块和默认算法。Node 16 到 Node 17 的时候Node 把默认的 OpenSSL 升级到了 3.0直接导致一大批基于老版本 webpack 的项目在启动时报ERR_OSSL_EVP_UNSUPPORTED因为 webpack 4 内部用到了 OpenSSL 3.0 已经废弃的 MD4 哈希算法。node-sass更极端它是用 C 写然后编译成二进制绑定的每个 Node 大版本对应一个 ABI 版本号Node 版本一变预编译好的二进制就找不到只能现场编译而现场编译又需要 Python 和 C 构建工具链Windows 上还要装 Visual Studio Build Tools一连串下来能让新手直接崩溃。我的做法是用 nvm 把常用的几个版本都装好然后在每个项目目录下放一个.nvmrc。用的时候在项目根目录执行一次nvm use进入项目自动切版本。# 查看本机已安装的 Node 版本 nvm list # 安装一个指定版本 nvm install 18.16.0 # 在项目根目录切换到 .nvmrc 里声明的版本 nvm use # 确认当前版本 node -v npm -v版本选择上我有一套自己的判断标准直接给出来Vite 5 需要 Node 18 以上推荐 18.18 或 20.xVue CLI 4.x 的老项目Node 14 或 16 最稳只要依赖里有node-sass先去看它的版本node-sass6.0 对应 Node 165.x 对应 Node 144.x 对应 Node 12 甚至更低。sassDart Sass就没这个烦恼它是纯 JS 实现不受 Node ABI 影响所以新项目我一律建议用sass而不是node-sass。注意nvm 在 Windows 上用的是 nvm-windows它和 macOS/Linux 上的 nvm 不是同一个项目命令有差异比如 Windows 版没有nvm use --delete-prefix这种用法而且切换版本时会把全局安装的包一起切走。如果你全局装过pnpm或者yarn切完 Node 版本可能会发现命令找不到了需要在新版本下重新装一次。2.2 包管理器选哪个锁文件比直觉靠谱npm、yarn、pnpm 三个都能用但一个项目里只应该用一个判断依据就是锁文件。硬要对比的话我的经验是这样的包管理器安装速度磁盘占用幽灵依赖问题适合场景npm中等每个项目一份完整副本存在通用兼容性最好yarnclassic快每个项目一份完整副本存在老项目多稳定性好yarnberry中等使用 zip 存储占用小一定程度缓解新项目需要 PnPpnpm最快全局硬链接占用最小基本杜绝多项目并行开发速度差异在冷启动时最明显。同样一个四百多个依赖的 Vue 3 项目我第一次装的时候npm 用了大概两分半钟yarn 一分四十秒左右pnpm 四十秒出头。原因在于 pnpm 用的是内容寻址存储加硬链接同一个版本的包在全机器上只存一份第二次给别的项目装的时候几乎不下载。但它严格隔离依赖树只有package.json里声明过的包才允许被引用这点对规范项目结构有好处坏处是有些老项目依赖了幽灵依赖也就是依赖了别人的依赖换到 pnpm 上会直接报Cannot find module。切换包管理器这件事一定慎重。我见过有人因为 npm 装不上就换成 pnpm结果package-lock.json和pnpm-lock.yaml同时存在仓库里后面别人拉代码就乱了今天用这个明天用那个依赖版本在不同人机器上不一样最后出现同一个分支有人能跑有人跑不起来的情况。真要换把旧锁文件删掉在提交信息里写清楚让全组一起换。镜像源配置是另一个提速点。国内直连官方源下载大依赖会比较慢配一个国内镜像能明显改善。这里有两种做法一是项目级临时指定二是一次性全局配置。# 临时用一次不改全局配置 npm install --registryhttps://registry.npmmirror.com # 全局配置写入 ~/.npmrc npm config set registry https://registry.npmmirror.com # 看看当前生效的源和代理配置 npm config get registry npm config list注意有些公司内网会把 npm 源指向私有 Nexus 或 Verdaccio这种情况下不要覆盖全局 registry改用项目根目录的.npmrc单独配避免影响到别的项目。另外如果之前配过proxy或https-proxy换网络环境后忘了清掉会出现ETIMEDOUT或者莫名的证书错误用npm config delete proxy和npm config delete https-proxy清一下再试。2.3 IDEA 需要手动改的几处设置IDEA 的默认配置对前端项目不够友好我在每台新机器上都会改这几处。第一处是 Node 解释器。打开File → Settings → Languages Frameworks → Node.js把 Node interpreter 指向 nvm 当前版本对应的node.exe或node可执行文件。这一步不做的话IDEA 里跑 npm 脚本时会用系统 PATH 里的那个 Node跟你终端里node -v看到的可能不是同一个版本于是出现终端能跑、IDEA 里跑不了的诡异现象。同时在同一个页面里把包管理器设成npm或yarn指定好对应的 CLI 路径。第二处是 Terminal 的 shell。在Settings → Tools → Terminal里Windows 上我一般把 Shell path 改成cmd.exe或者指向 Git Bash 的bash.exe。理由前面说过PowerShell 的执行策略会拦下一部分 npm 脚本。如果团队里就是要用 PowerShell那得先放开策略# 以当前用户身份放开脚本执行权限 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned # 确认当前策略 Get-ExecutionPolicy -List第三处是文件编码。Settings → Editor → File Encodings里Global、Project、Default encoding for properties files 三处都设成 UTF-8并勾上Transparent native-to-ascii conversion。中文注释变乱码、终端输出中文变成问号几乎都是这里没设对。项目里如果有.editorconfigIDEA 会读它但编码这一项还得靠 IDE 设置兜底。第四处是索引排除这个最影响体验。右键node_modules目录 →Mark Directory as→Excluded。这样 IDEA 就不会去索引那几万个文件内存占用和启动时间会有肉眼可见的改善。与之配套的还有Settings → Directories里检查一下有没有误把dist、.git加进索引范围。顺带提一句IDEA 的Settings → Advanced Settings里可以调整索引的线程数和内存上限如果你机器内存够16GB 以上把 IDE 的最大堆调到 2048MB 到 3072MB 之间会比较舒服具体数值在Help → Change Memory Settings里改改完要重启。3. 从打开项目到页面跑起来的完整流程3.1 打开目录的方式别弄错IDEA 里打开项目有两个入口一个是Open一个是Import Project。前端项目一律走Open选中项目根目录也就是有package.json的那一层就行。如果项目是前后端同仓根目录下是backend和frontend两个文件夹那有两种处理方式要么直接打开仓库根目录让 IDEA 把 Java 模块和前端目录都识别出来要么单独 Open 那个frontend目录把前端部分当成独立项目处理。前者适合需要频繁联调的后者适合你只改前端、只是偶尔看一眼后端接口定义。打开之后 IDEA 会做一轮扫描。如果根目录下有package.json右下角会弹出一个提示问你要不要运行npm install我一般点取消手动去终端里装。原因是 IDEA 自动触发的安装用的是它自己配置的 Node 和包管理器一旦环境没配好它会先装一半失败留下一个不完整的node_modules后面再装容易出现ENOENT之类的目录残留问题。3.2 依赖安装npm install和npm ci的区别要搞清装依赖这件事上npm install和npm ci的区别值得单独说。npm install会读package.json在满足版本范围的前提下尽量装最新版本然后更新锁文件。npm ci完全按package-lock.json里锁定的版本来装而且会先把node_modules整个删掉再装。团队协作和 CI 环境里永远用npm ci因为只有它保证你装出来的依赖树和别人完全一致。本地开发第一次拉项目我也建议先用npm ci图个干净。# 严格按锁文件安装先清空 node_modules npm ci # 常规安装会更新锁文件 npm install # 只装生产依赖跳过 devDependencies npm install --omitdev # 忽略生命周期脚本遇到 postinstall 报错时可以试试 npm install --ignore-scripts最后那条--ignore-scripts是应急手段不是常规操作。有些包的postinstall脚本会去下载二进制文件或者做代码生成如果这一步失败整个安装就会中断。用--ignore-scripts能先跳过它把依赖装好代价是那个包可能缺少必要的二进制文件需要你后面手动补。我遇到过一次puppeteer的postinstall因为网络原因卡住不动就是用这个参数跳过然后手动指定了本地的 Chromium 路径。node_modules装完之后如果项目里有husky还会执行prepare脚本去安装 Git 钩子。这一步在 IDEA 里经常失败因为 IDEA 调用的 Git 路径和终端里的可能不一致报husky - install command is not executable之类的错。稳妥的做法是在终端里手动执行一次# 跳过 husky 的钩子安装 npm install --ignore-scripts # 然后单独初始化钩子 npx husky install3.3 运行配置怎么建IDEA 跑 npm 脚本有两种方式。一种是在右侧的 npm 工具窗口里直接双击脚本名IDEA 会自动生成一个运行配置。另一种是手动建Run → Edit Configurations → → npm然后填三样东西。Package.json 选项目根目录的那份。Command 选run。Scripts 填脚本名比如serve、dev、start。填完之后在Environment variables里可以补环境变量Before launch里可以加一个前置任务。关于环境变量这块值得多说两句。Vue CLI 和 Vite 都支持.env系列文件但加载规则不一样。Vue CLI 读.env、.env.local、.env.[mode]、.env.[mode].localVite 也一样但只有以VUE_APP_Vue CLI或VITE_Vite开头的变量才会被注入到客户端代码里其他变量只有构建脚本能读到。我见过有人写了个API_URLhttp://xxx在.env里代码里用process.env.API_URL死活取不到值就是因为前缀不对。Vite 里更要注意客户端代码里不能用process.env得用import.meta.env.VITE_API_URL。代理配置也在这里分叉。webpack 时代写在vue.config.js// vue.config.js适用于 Vue CLI 项目 module.exports { devServer: { port: 8080, proxy: { /api: { target: http://127.0.0.1:8000, changeOrigin: true, pathRewrite: { ^/api: } } } } }Vite 项目写在vite.config.ts// vite.config.ts适用于 Vite 项目 import { defineConfig } from vite import vue from vitejs/plugin-vue export default defineConfig({ plugins: [vue()], server: { port: 5173, proxy: { /api: { target: http://127.0.0.1:8000, changeOrigin: true, rewrite: (path) path.replace(/^\/api/, ) } } } })注意pathRewrite和rewrite这两个字段名不一样写错了不报错但代理就是不通请求会 404。这是我最常看到的代理不生效的原因排在第二位的是target里写了localhost而不是127.0.0.1在部分机器上localhost会先解析到 IPv6 的::1后端只监听了 IPv4于是连接被拒。3.4 启动之后怎么确认真的跑通了看到App running at: http://localhost:8080/只是第一步这时候还有三件事要确认。浏览器打开页面F12 看 Console 有没有红色报错Network 面板里看静态资源是不是 200。如果页面能出来但样式全乱大概率是 CSS 加载失败或者publicPath配错。然后点几下菜单看看路由跳转是否正常路由一跳转白屏、控制台报Failed to resolve component通常是组件按需引入没配上。接着验证接口通不通。在 Network 里找一个业务请求看它的 URL 是不是http://localhost:8080/api/xxx这种带前缀的形式如果是直接打到了http://后端地址说明代理没生效前端绕过了 devServer 直连后端这时候只要后端没开跨域就会报 CORS。最后是断点调试在 IDEA 的 JavaScript Debug 配置里把 URL 填成开发服务器地址启动之后就能在.vue文件的script段落里打断点变量能看能改这是 IDEA 相对 VS Code 的一个小优势前后端断点可以在同一个窗口里来回切。4. 踩过的坑报错现场与排查顺序4.1 依赖安装阶段的各种红字EACCES: permission denied。装全局包或者某些需要写系统目录的操作时会撞上。根源基本是权限问题Mac 和 Linux 上更常见。解决思路是把全局包目录挪到用户目录下别用sudo npm install那个做法会把一堆文件的所有者改成 root后面更麻烦。# 查看当前全局前缀 npm config get prefix # 改成用户目录下的路径 mkdir -p ~/.npm-global npm config set prefix ~/.npm-global # 然后把 ~/.npm-global/bin 加进 PATHERESOLVE unable to resolve dependency tree。npm 7 以后对 peer dependency 的检查变严了很多老项目依赖树本来就有冲突装的时候直接卡住。可以先用--legacy-peer-deps绕过或者用--force强制。这两个参数有区别--legacy-peer-deps是按 npm 6 的老规则处理 peer 依赖不改动版本--force更粗暴会连版本冲突一起忽略可能装出一个实际不可用的依赖树。我一般先用前者。gyp ERR!和node-sass编译失败。前面说的 Node 版本问题在这里集中爆发。最省事的方案是换 Dart Sass把node-sass从package.json里删掉装sass同时确认sass-loader版本在 10 以上。如果项目基于某些老组件库必须用node-sass那就老老实实切 Node 版本。Windows 上实在要现场编译还需要 Python 3 和 VS Build Tools安装过程相当长我不太推荐这条路。Cannot find module xxx但package.json里明明有。这种情况九成是node_modules装坏了。删掉重装基本能解决# Windows 上删 node_modules 有时会因为路径过长失败可以先用 rimraf npx rimraf node_modules npm ci路径过长是 Windows 的老毛病node_modules层层嵌套很容易超过 260 字符限制。开长路径支持或者用rimraf都能缓解长期看还是用 pnpm 更好它的目录结构扁平得多。4.2 启动阶段的坑端口被占用。IDEA 里可能同时跑着好几个项目8080、5173、3000 这些常用端口特别容易撞。# Windows 下找占用 8080 的进程 netstat -ano | findstr :8080 # macOS / Linux lsof -i :8080查到 PID 之后在任务管理器里结束或者直接改项目端口。改端口的位置Vue CLI 在vue.config.js的devServer.portVite 在server.port也可以通过命令行参数临时覆盖npm run dev -- --port 8081。注意中间那两个短横线是必须的它是 npm 转传参数的约定少了它参数会被 npm 自己吃掉。ERR_OSSL_EVP_UNSUPPORTED。Node 17 以上跑老 webpack 项目的典型报错完整信息里会带digital envelope routines::unsupported。三种处理方式降低 Node 版本到 16设置环境变量NODE_OPTIONS--openssl-legacy-provider升级 webpack 到 5。我一般选第二种改一次就完事# Windows PowerShell $env:NODE_OPTIONS--openssl-legacy-provider # macOS / Linux export NODE_OPTIONS--openssl-legacy-provider # 或者直接写进启动脚本 scripts: { serve: cross-env NODE_OPTIONS--openssl-legacy-provider vue-cli-service serve }JavaScript heap out of memory。项目大的时候 webpack 打包会吃掉超过 Node 默认的堆内存上限。提高上限即可配合 IDEA 自己那个内存设置一起调效果更明显。export NODE_OPTIONS--max-old-space-size4096vue-cli-service: command not found。node_modules/.bin没进 PATH或者依赖压根没装全。在项目根目录直接npx vue-cli-service serve通常能确认到底是哪一类问题。4.3 打包后的坑vue 打包后布局异常这个问题在关键词里出现的频率很高我自己也被坑过两次。表现是开发环境一切正常npm run build之后丢到服务器上页面能打开但样式错位、图片不显示、路由一跳转就白屏。原因基本集中在路径基准上。webpack 项目里是publicPath。默认值是/意味着所有静态资源都从域名根目录去找。如果你的项目部署在子路径下比如http://example.com/admin/而publicPath还是/那浏览器就会去http://example.com/js/app.js找文件自然 404或者加载到别的东西。改成相对路径./或者绝对子路径/admin/就行。// vue.config.js module.exports { publicPath: process.env.NODE_ENV production ? /admin/ : /, outputDir: dist, assetsDir: static }Vite 项目对应的字段叫base写法和含义一致。这个字段名差异是我的血泪教训有次照着 webpack 文档改publicPathVite 根本不认白白折腾了半小时。History 路由刷新 404。这是 SPA 的通病前端用 history 模式/user/list这种路径在浏览器里刷新时请求会直接打到服务器服务器上没有这个实体文件就返回 404。开发环境下 devServer 有historyApiFallback帮你兜着所以你看不出来。部署到 Nginx 上要自己配location / { try_files $uri $uri/ /index.html; }如果不想动服务器配置前端可以切回 hash 模式URL 里带个#刷新永远不会 404代价是地址栏不太好看对 SEO 也有影响。这个取舍要看项目类型后台管理系统我一般直接用 hash省事。资源 404 但文件名看起来对得上。有个很隐蔽的情况是文件名大小写。Windows 和 macOS 默认文件系统不区分大小写Linux 区分。开发机上import Hello from ./hello.vue能跑打包部署到 Linux 服务器就报找不到模块。这类问题没有捷径只能规范团队命名习惯并尽量在成员之间统一大小写风格用 ESLint 插件做提示也能缓解一部分。4.4 IDEA 自身造成的那些玄学问题改了代码不热更新非得重启。Vue CLI 的热更新依赖文件监听IDEA 的默认保存行为是安全写入——它不直接修改原文件而是先写临时文件再替换。这个机制会让 webpack 的文件监听失效因为它监听的 inode 变了。关掉它就行Settings → Appearance Behavior → System Settings → 取消勾选 Use safe write。这个设置我每次装新 IDEA 都会改改完之后热更新基本就正常了。IDEA 里跑的命令和终端里跑的结果不一样。前面提过的 Node 解释器配置是主因还有一个是 IDEA 运行配置里的工作目录。npm 运行配置默认的 working directory 是package.json所在目录如果你手动改过它或者在 monorepo 里打开了根目录脚本执行时的相对路径就会变导致读取.env文件、读取本地静态资源全都出错。package.json路径、Working directory、Node interpreter 这三项必须是一致的缺一项都可能出问题。IDEA 卡顿、输入延迟、跳转要等两秒。还是索引的问题。除了把node_modules标记为 Excluded还可以在Settings → Editor → File Types里把一些不需要编辑的目录排除另外定期做一次File → Invalidate Caches也有用。我一般一个月清一次缓存清理后第一次打开项目会慢但后面会明显顺滑。内存分配上8GB 内存的机器建议最大堆给 1500MB 到 2000MB16GB 以上的可以给 3000MB 左右给太多反而会让操作系统开始换页更慢。5. 一张速查表和我平时不外传的几条经验上面这些坑散落在各阶段我把最常见的整理成一张对照表出问题时按图索骥会快很多。现象大概率原因快速验证方式处理办法启动时报ERR_OSSL_EVP_UNSUPPORTEDNode 17 配老 webpack看node -v加NODE_OPTIONS--openssl-legacy-provider或降 Nodenode-sass编译失败Node ABI 不匹配看node-sass版本与 Node 版本对应表换 Dart Sass或切对应 Node代理不生效接口 404配置字段写错打开 Network 看请求 URLwebpack 用pathRewriteVite 用rewrite页面白屏控制台无报错publicPath/base配错看 Network 里 JS 请求状态改成对应子路径或./打包后样式错位资源路径前缀不对对比开发与生产环境的资源 URL调publicPath或base刷新页面 404history 模式 服务端无兜底直接请求一个子路由配try_files或改 hash 模式IDEA 里不热更新Safe Write 干扰文件监听用外部编辑器改文件看是否生效关闭 Use safe write终端命令能跑IDEA 里跑不了Node 解释器指向不同版本比较两处node -v在 Settings 里统一 Node 路径Cannot find module但依赖已声明node_modules装得不完整看该目录下是否存在该包删掉重装用npm ci分享几条我自己总结的习惯都是踩坑换来的。第一接手任何前端项目先跑node -v和npm ls --depth0前者确认版本后者把实际装上的顶层依赖打出来和package.json核对一下有没有大偏差。这个动作花不到十秒能提前发现问题。第二node_modules出问题的时候别在原地反复npm install直接删干净重装反复安装只会叠加出更难排查的状态。第三任何一次莫名其妙好了的情况都值得花两分钟搞清楚到底是哪一步改动起的作用否则下次还会掉进去。最后再说一个我用了很久的小技巧。给.env文件做一份对照说明把每个变量对应哪个环境、哪个值是什么写在项目 README 或者一个.env.example里。前后端同仓的项目里接口地址、文件服务地址、地图 key 这些东西经常变新同事拉下代码跑不起来十次里有三次是因为.env没配或者配了旧值。把这件事固化下来比事后一个个排查要省太多时间。至于这个项目后续怎么扩展我自己的做法是把 IDEA 的运行配置也一起提交到./idea/runConfigurations目录下.idea目录里只提交运行配置和代码风格其余全部 gitignore这样团队里每个人拉下来就有现成的启动按钮再也不用口口相传先点哪个再点哪个。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进