【webpack】配置时的常见报错处理

1. 安装了webpack-merge, 报错merge is not a function

报错图片
报错原因:
在开发环境配置文件中定义了 let merge=require("webpack-merge");并使用了merge()函数

解决方案:
用解构赋值对merge进行匹配赋值

let { merge } = require("webpack-merge");

2. webpack-dev-server 报错 Invalid options object

报错图片

原因及解析:
错误信息中提示contentBase 不是有效的配置项(可以看到contentBase不在罗列的有效配置项中)。因为Weback 5contentBase的配置修改为 static

解决方法:
contentBase 修改为static

3. Cannot find module ‘vue-loader/lib/plugin’

报错图片

原因及解析:
查看node_modules/vue-loader下确实没有lib/plugin

解决方法:
package.jsonvue-loader版本更改为15.9.2,删除node_modules下的vue-loader,执行 npm install --force

4. require is not defined in ES module scope, you can use import instead

报错图片

原因及解析:
package.json 中配置了 "type": "module"

解决方法:
"type": "module"一行给删除,或者把module改为"commonjs"

5. Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.

-configuration has an unknown property ‘rules’. These properties are valid
报错图片

原因及解析:
配置了webpack 不存在的配置项,提示了是rules 的问题

解决方法:
查看webpack 配置,rules 不在根配置上,而是在module

module.exports = {
    module: {
         rules: [
            // 配置不同文件的解析
         ]   
    }
}

6. Error: listen EACCES: permission denied ::1:8080

报错图片

原因及解析:
常见错误,端口被占用,devServer 换个端口即可

解决方法:
换一个端口号

module.exports = {
    devServer: {
    hot: true, //模块的热替换
    open: true, // 编译结束后自动打开浏览器
    port: 8081, // 设置本地端口号
    host: "localhost" //设置本地url
  }
}

7. Field ‘browser’ doesn’t contain a valid alias configuration;Module not found: Error: Can’t resolve ‘@/assets/logo.svg’ in ‘’;

报错图片

原因及解析:
不能识别 @/assets/logo.svg这个路径,alias configuration也没有配置该路径

解决方法:
配置快捷访问路径

function resolve(dir) {
  return path.join(__dirname, "..", dir)
}

module.exports = {
    // ...其他配置
    resolve: {
        // 快捷访问路径配置
        alias: {
          "@": resolve("src"),
          "@components": resolve("src/components")
          // ...
        }
      }
} 

8. ERROR in Conflict: Multiple assets emit different content to the same filename index.html

报错图片
原因及解析:
文件重复问题:

  1. webpack.base.conf.jswebpack.build.conf.js文件中都配置了HtmlWebpackPlugin,且在webpack.build.conf.js使用webpack-merge引入了webpack.base.conf.js,使HtmlWebpackPlugin存在多个
  2. 在打包静态资源配置中,public文件夹下的文件,未过滤 ,从而导致文件重复

解决方案:

  1. 删除webpack.base.conf.js 中的 HtmlWebpackPlugin ,分别在webpack.dev.conf.jswebpack.build.conf.js文件中写自己的HtmlWebpackPlugin 配置
  2. 使用copyWebpackPlugin输出静态资源时,文件重复
/**
 * 比如: public文件夹下存在index.html
 * ignore未过滤index.html
 * 则将index.html复制到dist文件夹时,会与webpack生成的index.html文件重复
*/
  new copyWebpackPlugin({
      patterns: [
        {
          from: resolve("/public"),
          to: resolve("/dist"), //放到output文件夹下
          globOptions: {
            dot: true,
            gitignore: false,
            ignore: [
              "**/index.html"
            ] // 配置不用copy 的文件
          }
        }
      ]
    })

9. WARNING in child compilations (Use ‘stats.children: true’ resp. ‘–stats-children’ for more details)

报错图片

原因及解析:
9.1 根据报错提示修改package.jsonwebpack.base.conf.js

// webpack.base.conf.js
module.exports = {
	// ...其他配置
	  stats: {
	    children: true
  }
}
"build:dev": "cross-env envMode=dev webpack --config ./build/webpack.build.conf.js  --color --stats-children"

9.2 重新执行npm run build:dev,查看报错详细信息
报错图片
9.2 查看报错子模块为WARNING in DefinePlugin Conflicting values for 'process.env.NODE_ENV'
根据提示Use 'stats.errorDetails: true' resp. '--stats-error-details' to show it再次修改文件

// webpack.base.conf.js
module.exports = {
	// ...其他配置
	  stats: {
	    children: true,
	    errorDetails: true
  }
}
// package.json
"build:dev": "cross-env envMode=dev webpack --config ./build/webpack.build.conf.js  --color --stats-error-details"

9.3 再次查看报错详情
报错图片
问题原因描述:webpack中的optimization.nodeEnv 在不设置时,NODE_ENV默认读取mode的值(默认是productiondevelopment),与 DefinePlugin重新设置时与mode不一致,导致冲突

解决方案:

  1. 方案1: 在webpack.base.conf.js中添加配置
module.exports = {
	// ...其他配置
	optimization:{
		nodeEnv: false // 以DefinePlugin设置为准
	}
 }
  1. 方案2:删除mode,以DefinePlugin中设置的NODE_ENV为准区分

10. Feature flags VUE_OPTIONS_API, VUE_PROD_HYDRATION_MISMATCH_DETAILS are not explicitly defined.

vue警告图片

问题原因描述:
这个警告是在 Vue 开发环境中的特定配置引起的。提示了当前运行的 Vueesm-bundler 版本希望定义特定的编译时特性标志,以获得更好的树状结构提示。

解决方案:
配置参考: https://cn.vuejs.org/api/compile-time-flags.html

// DefinePlugin添加以下配置
module.exports = {
	plugins: [
		new webpack.DefinePlugin({
	      __VUE_PROD_DEVTOOLS__: false,
	      __VUE_OPTIONS_API__: true,
	      __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false
	    })
	]
}
### 解决方案 在使用 `webpack-obfuscator` 遇到报错问题,通常是由以下几个原因引起的: #### 1. **版本不兼容** 确保所使用的 `webpack-obfuscator` 版本与当前项目的 Webpack 版本相匹配。如果版本过高或过低都可能导致错误。对于 Vue CLI 项目中的 Webpack 版本(通常是 v4),推荐使用 `webpack-obfuscator` 的稳定版本 `^2.6.0` [^1]。 可以通过以下命令检查本地项目的 Webpack 和 `webpack-obfuscator` 版本: ```bash npm list webpack webpack-obfuscator ``` 如果发现版本不一致,则需要调整到合适的版本范围。可以参考官方文档中的标签页来确认具体支持情况[^2]。 --- #### 2. **插件配置不当** `webpack-obfuscator` 插件的配置可能存在问题,尤其是当其选项未正确设置可能会引发运行错误。以下是标准的配置方法供参考: ##### 配置示例 在 `vue.config.js` 文件中添加如下代码片段: ```javascript const WebpackObfuscator = require('webpack-obfuscator'); module.exports = { configureWebpack: { plugins: [ new WebpackObfuscator( { rotateStringArray: true, // 是否旋转字符串数组 stringArrayThreshold: 0.8, // 字符串替换阈值 }, ['excludeModule'] // 排除特定模块名列表 ), ], }, }; ``` 注意:以上参数仅为示例,实际应用中需根据需求调整配置项[^2]。 --- #### 3. **依赖冲突** 有其他工具链(如 Babel 或 ESLint)会对 JavaScript 文件进行预处理操作,在此过程中可能发生干扰从而影响最终构建过程并触发异常行为。建议尝试单独测试仅含基础功能的小型工程验证是否存在相同现象;另外也可以通过清理缓存重新安装全部依赖包的方式排除潜在隐患: ```bash rm -rf node_modules package-lock.json yarn.lock npm install --legacy-peer-deps ``` --- #### 4. **日志分析排查法** 针对具体的错误提示信息展开深入调查非常重要。例如常见的几种典型场景及其对应解决办法包括但不限于下面这些情形之一: - 如果看到类似于 “Cannot read property 'xxx' of undefined”的消息,则可能是由于某些内部对象初始化失败所致; - 当显示“No overload matches this call.”这样的TypeScript 类型检查警告,请核实tsconfig.json 设置是否合理合法; 务必仔细阅读完整的堆栈跟踪记录以便定位根本原因所在位置[^1]。 --- ### 总结 综上所述,要成功解决 `webpack-obfuscator` 报错问题可以从四个方面入手考虑——即核查软件组件间的相互适应程度、审查自定义脚本逻辑编写质量、规避第三方库之间可能出现的竞争状况以及充分利用调试辅助手段获取更多线索直至彻底消除故障为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值