【问题标题】:How to run Vue.js dev serve with https?如何使用 https 运行 Vue.js 开发服务?
【发布时间】:2018-01-30 02:45:58
【问题描述】:

我正在使用 Vue-cli 使用 webpack 模板创建 vue 项目。如何在开发中使用 https 运行它:npm run dev?

【问题讨论】:

  • 下面有一个更新的答案。也许最好将其标记为最佳答案,以便更容易找到。

标签: https webpack vue.js


【解决方案1】:

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

 "serve": "vue-cli-service serve",

与

 "serve": "vue-cli-service serve --https true",

在您项目的package.json 文件中。

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

【讨论】:

  • 作为附加提示,您可以通过 chrome://flags/#allow-insecure-localhost 为 chrome 上的 localhost 允许 https
  • 这不是一个好主意,如果你修改你的 package.json 强制 https 服务并且你建立你的项目你会得到一个完整的错误
  • 我们如何加载证书? (使用它的许多原因,WebRTC 休息,iPhone 上的地理位置测试等)
【解决方案2】:

Jianwu Chen 的回答帮助了我,但为了帮助那些想要扩展答案的 cmets,我正在创建这个答案。希望对你有帮助。

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

所以要尝试在一个地方给出完整的答案,就在这里......

首先,在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/'
    }
}

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

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

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

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

幸运的是,有一个工具可以帮助您轻松做到这一点: https://mkcert.dev(当前指向https://github.com/FiloSottile/mkcert)

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

然后按照说明进行操作:

mkcert -install

接着是:

mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1

这将在目录中创建文件。

将文件复制到上面 vue.config.js 中引用的源文件夹(即 ./cert),然后就可以开始使用了。确保更新文件名以匹配。

更新: 还要注意配置有:

public: 'https://localhost:8080/'

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

【讨论】:

  • 非常感谢!这比我想象的要容易。在我的情况下,我必须在devServer 配置中添加一个选项以停止控制台中的GET https://localhost/sockjs-node/info?t=1565111974584 net::ERR_CONNECTION_REFUSED 错误:{public: 'https://localhost:8080/'}
  • 在使用 Vuetify 时,我不得不对此稍作修改,否则会报错:"[ERR_INVALID_ARG_TYPE]: The "options.cert" property must be of string or an instance of Buffer 、TypedArray 或 DataView。收到“对象”的实例。我做了 https:true 并在同一级别添加了密钥和证书属性,即 devServer 的属性。然后一切似乎都按预期工作。
  • 谢谢乍得,我一直在回复这个答案,它非常有用。我不明白的是,如果它生成的应用程序甚至无法在开箱即用的 chrome 上运行,那么 vue-cli 的意义何在?当您运行 vue create 时,他们肯定可以提供类似的东西吗?
  • @Bassie 很高兴你觉得这很有帮助。我的猜测是,如果我们不需要 vue cli 可以做到的自签名证书。而且我确信他们可以使用上面的 mkcert 之类的工具。在他们的 github 存储库中提出可能是一个好问题 - 建议他们可以选择启用 https 来指导用户生成证书,然后他们自动设置这些值。
  • 好像mkcert 坏了,或者这种方法可能坏了。
【解决方案3】:

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

chrome://flags/#allow-insecure-localhost

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

【讨论】:

  • 这可以节省我的时间!
【解决方案4】:

Webpack 模板使用express 作为开发服务器。所以只需替换

var server = app.listen(port)

在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);

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

【讨论】:

  • 谢谢@choasia,它运行良好!我使用以下命令创建了密钥和证书文件: openssl genrsa -out localhost.key 2048 openssl req -new -x509 -key localhost.key -out localhost.cert -days 3650 -subj /CN=localhost 都很好,但是浏览器警告说该站点不被信任。我将证书导入到“受信任的根证书颁发机构”(在 Windows 中),然后在 IE 中工作,但在 chrome 和 Firefox 中都没有,有什么想法吗?谢谢
  • 嗨,这有帮助吗? stackoverflow.com/questions/7580508/…
【解决方案5】:

在最新的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,
  },
}

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

【讨论】:

  • 这是使用 vue cli 3 的项目的最新答案
  • 到目前为止我得到了。但是 chrome > 58 抛出 net::ERR_CERT_COMMON_NAME_INVALID
  • 效果很好,但您只需要 https: true 部分。其他变量是可选的,不需要使用 https。
  • 我仍然在 chrome 中得到 ERR_CERT_AUTHORITY_INVALID。有没有办法在 chrome 中解决这个问题?
  • 有没有人设法绕过 Chrome 中的 `ERR_CERT_AUTHORITY_INVALID 问题?
【解决方案6】:

最简单的方法是进入 package.json 并将“dev”更改为

 "dev": "webpack-dev-server --inline --progress  --https --config build/webpack.dev.conf.js",

它仍然会在控制台中在http://localhost 上运行消息,但您可以通过https://localhost 访问该站点

【讨论】:

  • 作品:"scripts": { "serve": "vue-cli-service serve --https" }
  • @Nico Prat 你应该用这段文字来回答,它有效
  • 我使用了"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot --https --key ./localhost.key --cert ./localhost.crt",即mkcert生成的localhost.key和localhost.crt。 (vuejs 2.6.11)
【解决方案7】:

在/build/webpack.dev.conf.js,到devWepackConfig 在devServer,添加

https: true

【讨论】:

  • 为什么它被否决了?就我而言,在devServer 下添加此选项效果很好。
  • 在 CLI 2 和 Webpack 3 上完美运行
猜你喜欢
  • 2015-11-05
  • 2018-04-02
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2012-11-11
  • 2019-02-04
  • 1970-01-01
相关资源
最近更新 更多