webpack-dev-server的proxy代理https网站报错:ERR_TLS_CERT_ALTNAME_INVALID

当本地开发环境使用webpack-dev-server进行API请求,遇到远程HTTPS服务器证书错误时,可以通过修改webpack配置来解决。在proxy选项中,设置`secure:false`忽略证书错误,并使用`changeOrigin:true`改变源,确保请求正确转发。这样可以避免浏览器的安全警告,正常进行开发工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本地开发环境中使用webpack-dev-server用作对远程测试服务器的API请求的代理。远程服务器使用的是HTTPS,这时页面会报错:
在这里插入图片描述
打开vscode,终端报错:
在这里插入图片描述

[HPM] Error occurred while trying to proxy request /api/v1/home/comprehensive-search
 from localhost:8888 to https://www.xxx.com (ERR_TLS_CERT_ALTNAME_INVALID) 
(https://nodejs.org/api/errors.html#errors_common_system_errors)

解决方法:

修改webpack.config.json或webpack.config.js(原理是修改proxy代理配置,如果你是使用的vue-cli等其他技术,都是相通的。)

proxy: {
    '/api': {
        target: 'https://www.xxx.com',
        secure: false,
        changeOrigin: true
    }
}

在proxy中加上

secure: false,
changeOrigin: true

如果浏览器未给出安全警告,则不需要加secure: false,只使用changeOrigin: true

原理(webpack文档有说明)

  • 默认情况下,在 HTTPS 上运行的带有无效证书的后端服务器将不被接受。需要配置:
secure: false
  • 默认情况下,代理时会保留主机头的来源,可以将 changeOrigin 设置为 true 以覆盖此行为。
changeOrigin: true
<think>好的,用户遇到了在Vue中使用marked解析插件时出现的Webpack相关错误,具体是`TypeError: __WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor`。首先,我需要分析这个错误的原因。根据引用[2],这个错误通常是因为在创建Vuex Store实例时,Store的大小写不正确。用户可能在某个地方写成了小写的`store`,而正确的应该是大写的`Store`。 接下来,我需要考虑marked和Webpack的集成问题。可能是在配置Webpack时,对marked的引入方式不正确,或者没有正确配置loader来处理marked相关的文件。此外,用户可能没有正确安装或配置marked插件,导致模块导入错误。 还要检查用户的Vue组件中是否正确引入和使用marked。例如,是否在组件中正确导入marked库,并在需要的地方调用其方法,比如`marked.parse()`。如果用户使用的是Vue 3,可能需要使用`marked.parse()`而不是`marked()`,因为Vue 3的响应式系统有所变化。 另外,检查Webpack的版本和相关配置是否正确。例如,是否安装了必要的依赖,如webpack-cli,以及是否有合适的规则来处理JavaScript文件。引用[1]中提到安装webpack的命令,可能需要确保所有依赖的版本兼容。 可能的解决方案包括:检查Vuex Store的实例化代码,确保使用大写的`Store`;重新安装或更新marked和webpack的版本;检查Webpack配置中的模块规则,确保正确处理marked相关的语法;以及在Vue组件中正确使用marked的方法。此外,可能需要配置Webpack的别名或者调整导入方式,避免模块路径错误。 最后,总结步骤,确保用户能够一步步排查和解决问题,从代码检查到依赖管理,再到配置调整,逐一排除可能的原因。</think>### 解决方案:Vue 中使用 marked 解析插件时的 Webpack 错误处理 #### 1. 错误原因分析 报错`TypeError: __WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor`通常与以下情况相关: - **Vuex Store 构造函数命名错误**:在导出 Vuex Store 时使用了小写的`store`,而正确应为大写的`Store`[^2]; - **marked 插件依赖未正确引入**:Webpack 未正确解析 marked 模块路径或语法; - **Webpack 配置未兼容 ES6 语法**:未配置 Babel 转换第三方库(如 marked)的代码。 --- #### 2. 分步解决方案 ##### 步骤 1:检查 Vuex Store 的构造函数命名 在 Vue 项目的 Store 定义文件中,确认导出时使用大写的`Store`: ```javascript // store/index.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ // 注意 Store 首字母大写 state: {}, mutations: {} }) ``` ##### 步骤 2:正确安装 marked 并配置 Webpack 1. **安装 marked 和 loader**: ```bash npm install marked -S npm install html-loader -D # 若需要解析 HTML 内容 ``` 2. **配置 Webpack 的 module.rules**(在`vue.config.js`中添加): ```javascript module.exports = { configureWebpack: { module: { rules: [ { test: /\.md$/, use: [ { loader: 'html-loader' }, { loader: 'markdown-loader' } ] } ] } } } ``` ##### 步骤 3:在 Vue 组件中正确使用 marked ```javascript import marked from 'marked' // 确保路径正确 export default { methods: { parseMarkdown(content) { return marked.parse(content) // Vue 3 需用 marked.parse() } } } ``` ##### 步骤 4:检查 Webpack 版本兼容性 - 升级 webpack 到最新稳定版: ```bash npm install webpack@5 webpack-cli@4 -D ``` --- #### 3. 验证配置 1. 重新启动项目: ```bash npm run serve ``` 2. 若仍报错,检查控制台提示的模块路径,确认`marked`是否被正确打包。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值