如何将 webpack 开发代理与 Nuxt 一起使用

Col*_*len 7 webpack nuxt.js nuxt-edge

使用Nuxt开发通用 JS 应用程序,我尝试配置webpack 的开发代理,以便仅在开发中请求/api代理到http://127.0.0.1:500/api到达 Python REST API 的位置。按照 Nuxt 文档,我扩展了 webpack 配置,如下nuxt.config.js所示:

build: {
  extend (config, { isDev }) {
    // Proxy /api to Python only in dev
    if (isDev) {
      const devServer = {
        proxy: {
          '/api': 'http://127.0.0.1:5000'
        }
      }
      config.devServer = devServer;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我记录配置,我会看到正在应用更改:

...
devServer: { proxy: { '/api': 'http://127.0.0.1:5000' } } }
...
Run Code Online (Sandbox Code Playgroud)

然而,当我访问http://127.0.0.1:8080/api/things时,我的 Nuxt 应用程序被返回(它在开发中的端口 8080 上运行),表明 webpack 开发代理没有捕获路径/api并执行代理。只是为了确认代理目标正在工作,如果我访问http://127.0.0.1:5000/api/things,我会得到预期的 API 响应。为什么当我扩展 Nuxt webpack 配置以启用 webpack 开发代理时,代理不起作用?

然而,我在@nuxt/proxy模块上取得了成功,但关键的是,我找不到一种方法让它只影响开发而不影响生产。那部分nuxt.config.js看起来像这样:

axios: {
  proxy: true
},
proxy: {
  '/api': 'http://127.0.0.1:5000'
},
Run Code Online (Sandbox Code Playgroud)

我很高兴使用 @nuxt/proxy 模块而不是(在其之上?)webpack 开发代理,如果它只能在开发中工作的话。

rrp*_*lot 5

我需要这样做,并且能够使用 nuxt.config.js 中的以下内容解决这个问题

export default {
  // other config ...

  ...process.env.NODE_ENV === 'development' && {
    proxy: {
      '/api': 'http://localhost:8000',
    }
  },
}
Run Code Online (Sandbox Code Playgroud)

如果我们正在进行开发构建,此代码只会在 nuxt 配置中添加代理密钥。

参考用于插入条件对象字段的语法(这是我以前不知道的): /sf/answers/3584031391/


Col*_*len 1

呃,我找错树了。

Nuxt需要代理,即使在生产环境中也是如此。当我的初始请求被处理并且应用程序是服务器端渲染时,任何 API 请求都需要被代理,因为 Node 服务器正在执行调用,而不是浏览器,因此这些 API 请求甚至不会像 nginx 那样到达我的生产路由器或 HAProxy(它通常//api适当的服务进行路由)。