执行npm run dev时触发webpack-cli TypeError: Cannot redefine property: tap求助
解决Laravel Mix执行
npm run dev时的Cannot redefine property: tap报错 问题场景
执行npm run dev命令时触发如下报错:
npm run development npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. > development > cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js [webpack-cli] TypeError: Cannot redefine property: tap at Function.defineProperty (<anonymous>) at Object.<anonymous> (C:\Users\dell\Downloads\fay\Modules\Votes\node_modules\laravel-mix\src\helpers.js:21:8) at Module._compile (node:internal/modules/cjs/loader:1105:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (C:\Users\dell\Downloads\fay\Modules\Votes\node_modules\laravel-mix\src\index.js:16:1) at Module._compile (node:internal/modules/cjs/loader:1105:14)
当前package.json配置:
{ "scripts": { "rtlcss": "rtlcss", "postinstall": "lerna bootstrap", "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "npm run development -- --watch", "watch-poll": "npm run watch -- --watch-poll", "prod": "npm run production", "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { "@babel/preset-env": "^7.16.4", "cross-env": "^6.0.3", "eslint": "^4.9.0", "eslint-config-spatie": "^2.0.3", "eslint-plugin-import": "^2.7.0", "glob": "^7.1.2", "laravel-mix": "^6.0.39", "laravel-mix-merge-manifest": "^0.1.2", "lerna": "^2.9.0", "rtlcss": "^2.4.0", "sass": "^1.25.0", "sass-loader": "^8.0.2", "vue-template-compiler": "^2.6.11", "webpack-shell-plugin": "^0.5.0" }, "dependencies": { "webpack": "^5.74.0", "yarn": "^1.22.19" } }
已尝试过Laravel Mix仓库的版本调整方案,也删除node_modules和package_lock.json重新安装,但问题依旧。
报错原因
这个错误的核心是依赖版本冲突:
- Laravel Mix 6.x已经内置了适配版本的Webpack,手动在
dependencies中声明webpack@5.74.0会导致版本不匹配,Mix内部的tap属性重定义操作和Webpack 5的核心实现冲突。 - 低版本的
cross-env(6.0.3)、`sass-loader`(8.0.2)和Laravel Mix 6.x兼容性较差,会触发依赖链中的属性定义冲突。 - 老旧的
lerna(^2.9.0)在monorepo环境下可能导致依赖安装不完整或版本错位。
解决方案
1. 调整依赖配置
修改package.json:
- 移除
dependencies中的webpack依赖(Laravel Mix已自带适配版本) - 更新冲突的dev依赖版本:
"cross-env": "^7.0.3", "sass-loader": "^10.2.1", "lerna": "^5.6.2" // 若项目不需要monorepo管理可直接移除
2. 优化npm scripts
使用Laravel Mix提供的内置命令替代直接调用Webpack,避免版本适配问题:
"scripts": { "rtlcss": "rtlcss", "postinstall": "lerna bootstrap", // 若移除lerna则删除此行 "dev": "mix", "development": "mix", "watch": "mix watch", "watch-poll": "mix watch -- --watch-poll", "prod": "mix --production", "production": "mix --production" }
3. 重新安装依赖
执行以下命令清理并重新安装依赖:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者seema Goyat
相关产品推荐
相关产品推荐

