如何使用https运行Vue.js dev服务?

Rae*_*mad 22 https webpack vue.js

我正在使用Vue-cli使用webpack模板创建vue项目.如何以https开发利用运行它npm run dev

Jia*_*hen 61

在最新的vuejs(截至2018年5月7日)中,您需要在项目根目录中添加"vue.config.js":

vue.config.js:

module.exports = {
  devServer: {
    open: process.platform === 'darwin',
    host: '0.0.0.0',
    port: 8085, // CHANGE YOUR PORT HERE!
    https: true,
    hotOnly: false,
  },
}
Run Code Online (Sandbox Code Playgroud)

在此文件中,设置值: https:true

  • 我仍然在chrome中得到ERR_CERT_AUTHORITY_INVALID。有没有办法解决这个问题? (7认同)
  • 这是使用vue cli 3的项目的最新答案 (4认同)
  • 到目前为止,我知道了。但是chrome> 58会在网上抛出:: ERR_CERT_COMMON_NAME_INVALID (2认同)
  • 效果很好,但您只需要`https:true`部分。其他变量是可选的,不需要使用https。 (2认同)

phi*_*294 13

In /build/webpack.dev.conf.js,to devWepackConfigin devServer,add

https: true
Run Code Online (Sandbox Code Playgroud)

  • 它为什么被投票?在我的例子中,在`devServer`下添加此选项非常有效. (4认同)

小智 10

如果您使用 vue ui 来为您的应用程序提供服务,一个简单的解决方案是替换

 "serve": "vue-cli-service serve",
Run Code Online (Sandbox Code Playgroud)

 "serve": "vue-cli-service serve --https true",
Run Code Online (Sandbox Code Playgroud)

package.json您的项目文件中。

现在使用 vue ui 为您的应用程序提供服务。您可以进行更多更改。见https://cli.vuejs.org/guide/cli-service.html#using-the-binary


cho*_*sia 8

Webpack模板express用作开发服务器.所以只需更换

var server = app.listen(port)
Run Code Online (Sandbox Code Playgroud)

以下代码build/dev-server.js.

var https = require('https');
var fs = require('fs');
var options = {
  key: fs.readFileSync('/* replace me with key file's location */'),
  cert: fs.readFileSync('/* replace me with cert file's location */'))
};
var server = https.createServer(options, app).listen(port);
Run Code Online (Sandbox Code Playgroud)

请注意,在webpack模板中,http://localhost:8080将使用opn模块在浏览器中自动打开.因此var uri = 'http://localhost:' + port,var uri = 'https://localhost:' + port为方便起见,您最好更换.


pin*_*nki 7

在 Chrome 或 Edge 中运行时,您仍会收到警告,因为该证书不是受信任的证书。但是您可以通过设置以下标志来关闭运行站点时的提示:

chrome://flags/#allow-insecure-localhost
Run Code Online (Sandbox Code Playgroud)

这也适用于最新版本的 Edge。


Cha*_*ter 6

Chen Jianwu Chen的答案帮助了我,但为了帮助那些需要扩展答案的评论者,我正在创建此答案。希望对您有所帮助。

问题基本上是,我们如何告诉浏览器“我知道它是无效的证书,但是我可以接受,因为我正在本地开发站点。”

因此,尝试在一个地方做出完整的回答,就可以了...

首先,在vue.config.js中确保您包含

const fs = require('fs')

module.exports = {
    devServer: {
        https: {
          key: fs.readFileSync('./certs/example.com+5-key.pem'),
          cert: fs.readFileSync('./certs/example.com+5.pem'),
        },
        public: 'https://localhost:8080/'
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,您可以在其中找到其他内容,但主要的是,您拥有带有密钥和证书子代的https。现在,您需要指向证书文件所在的位置。

我们不只是将https设置为true,而是将带有密钥和证书的对象传递给https。

我们告诉vue cli我们要使用此特定的证书和密钥。

我们如何获得该证书和密钥?好吧,我们必须创建它。

幸运的是,有一个工具可以轻松地完成此任务:https : //mkcert.dev(当前指向https://github.com/FiloSottile/mkcert

您可以按照GitHub中的说明进行安装。我个人只是从以下网址获取了最新版本:https : //github.com/FiloSottile/mkcert/releases

然后按照说明进行操作:

mkcert -install
Run Code Online (Sandbox Code Playgroud)

其次是:

mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
Run Code Online (Sandbox Code Playgroud)

这将在目录中创建文件。

将文件复制到上面的vue.config.js中引用的源文件夹(即./cert),您应该一切顺利。确保更新文件名以使其匹配。

更新: 还请注意配置具有:

public: 'https://localhost:8080/'
Run Code Online (Sandbox Code Playgroud)

感谢@mcmimik在评论中指出这一点。如果没有那行,您将得到他提到的:: ERR_CONNECTION_REFUSED的控制台错误。将此行添加到devServer作为https的同级项,将使该错误得到遏制。如果您喜欢这个答案,请确保也喜欢他的评论!

  • 非常感谢!这比我想的要容易。就我而言,我必须在`devServer`配置中添加一个选项,以停止控制台中的`GET https:// localhost / sockjs-node / info?t = 1565111974584 net :: ERR_CONNECTION_REFUSED`错误:{{public:'https: // localhost:8080 /'}` (3认同)