团队还在 vue 2.7,用最新的 cli 4.2 生成项目,package.json 里写的是 vue 3.4,安装后启动报 Cannot find module 'vue/dist/vue.esm-bundler.js'。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,生成器把框架版本写死在模板的 package.json 里,没有读目标项目的现有版本。跨大版本时 API 和构建链都不同,模板里的写法在旧版本上不成立。

碰到「生成器版本不匹配」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。

node -p "require('./node_modules/vue/package.json').version"
npm ls vue --depth=0

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,生成前读目标项目的 package.json 取框架主版本;模板按主版本分目录 不要用条件判断堆在一个文件里;生成后校验依赖版本与目标项目一致;在 README 里写明生成器支持的框架版本区间。

最后用这个标准收尾,在 vue 2.7 项目里生成的模块 package.json 没有新增 vue 依赖 启动不报模块找不到。

作者 9823189