使用Raw-loader为生产环境禁用vue.js网站的热重装

时间:2020-10-13 13:36:52

标签: javascript vue.js webpack-hmr

我有一个旧的vue.js应用程序正在登台和测试服务器上运行。

问题在于网络控制台在浏览器中被https://localhost/sockjs-node/info?t=1602594418799个请求所淹没,当然,它们失败了,因为它们引用的是浏览器中不可用的URL。

对于某些类似于生产(但不完全是)的环境,我想完全禁用HMR。

使用以下命令为网站提供服务: yarn vue-cli-service serve --port 8080 --mode production

由于某些原因,仅mode production不会禁用HMR。

我尝试了Internet上推荐的其他方法。

所以

module.exports = {
  devServer: {
    hot: false,
    liveReload: false
  }
}

devServer运行模式禁用实际的热刷新,但不禁用HMR-仍然看到那些/info的请求。

另一种解决方案:

 chainWebpack: config => {
    config.module
      .rule('vue')
      .use('vue-loader')
      .loader('vue-loader')
      .tap(options => {
          options.hotReload = false
          return options
      })
  }

在我的情况下不起作用:“无法设置未定义的属性hotReload”,可能是因为我的项目使用“原始加载程序”而不是vue-loader

另一个解决方案:

chainWebpack: config => {
    config.plugins.delete('hmr');
},

不起作用。不知道为什么。

另一个解决方案:

process.env.NODE_ENV === 'production'

这有效,不再有/info垃圾邮件。

但是有一个问题。我需要像stagingtesting这样的NODE_ENV,并想为它们禁用HMR。

我该怎么做?如何告诉vue.js和/或Webpack将NODE_ENV staging等与production一样对待?另外,如何基于其他自定义环境变量禁用HMR?

1 个答案:

答案 0 :(得分:0)

因此,似乎最好的办法是运行yarn build,然后在nginx或Apache或nodejs静态HTML服务器上提供dist文件夹。

仍然感到好奇,为什么当我使用mode production通过vue-cli运行网站时,为什么vue.js(或webpack或其他任何东西)的行为方式不一样。

这很不直观;我希望mode production的工作原理与构建站点并在任何其他服务器上托管之后完全一样。