Laravel 9运行npm run dev报compiler.plugin is not a function
报错根因
[webpack-cli] TypeError: compiler.plugin is not a function 是典型的Webpack版本与构建依赖API不兼容问题:compiler.plugin 是Webpack 4及更早版本的钩子注册API,Webpack 5已完全移除该API。Laravel 9项目默认依赖Laravel Mix做前端资源编译,出现该报错的核心原因都是依赖版本错配,常见触发场景:
- 安装依赖时未按lock文件约束拉取,自动升级到Webpack 5,但项目使用的laravel-mix版本低于v6,不兼容Webpack 5的API
- 全局安装的webpack、webpack-cli版本和项目本地依赖版本冲突,构建时优先读取了全局的不兼容版本
- 模板项目自带的依赖锁文件损坏,导致依赖树版本错乱
排查步骤
- 先确认本地依赖版本,执行以下命令输出当前安装的webpack、laravel-mix版本:
npm ls webpack npm ls laravel-mix
如果输出结果中webpack版本为5.x,laravel-mix版本低于6.0.0,即可确认是版本不匹配问题。
- 检查全局依赖冲突,执行以下命令查看全局安装的webpack相关包:
npm ls webpack webpack-cli -g
如果输出存在全局安装的webpack、webpack-cli包,大概率会干扰本地项目的构建流程。
修复方案
根据项目维护需求二选一即可:
方案1:保留现有低版本Mix配置(无需调整webpack.mix.js)
将webpack相关依赖锁定到4.x兼容版本,步骤如下:
- 删除现有依赖目录和锁文件:
rm -rf node_modules package-lock.json yarn.lock
- 安装兼容版本的构建依赖:
npm install webpack@^4.47.0 webpack-cli@^3.3.12 --save-dev
- 重新安装全量依赖并执行构建:
npm install npm run dev
方案2:升级Mix到兼容Webpack5的版本(推荐长期维护项目使用)
Laravel Mix v6及以上版本原生适配Webpack 5,升级后可彻底解决API兼容问题:
- 清空旧依赖和锁文件:
rm -rf node_modules package-lock.json yarn.lock
- 升级laravel-mix到最新稳定版:
npm install laravel-mix@latest --save-dev
- 检查项目根目录下的
webpack.mix.js配置,若存在自定义webpack扩展逻辑,调整为v6版本兼容写法即可,基础配置无需改动。 - 重新安装依赖并执行构建:
npm install npm run dev
全局冲突修复
如果排查到存在全局webpack相关依赖冲突,直接卸载全局版本即可,前端构建会优先读取项目本地node_modules内的依赖,无需全局安装webpack:
npm uninstall webpack webpack-cli -g
内容的提问来源于stack exchange,提问作者Manasse
相关产品推荐
相关产品推荐

