Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在为临时环境构建时,如何忽略vue.config.js中的devServer设置?_Node.js_Vue.js_Webpack Dev Server_Vue Cli - Fatal编程技术网

Node.js 在为临时环境构建时,如何忽略vue.config.js中的devServer设置?

Node.js 在为临时环境构建时,如何忽略vue.config.js中的devServer设置?,node.js,vue.js,webpack-dev-server,vue-cli,Node.js,Vue.js,Webpack Dev Server,Vue Cli,我正在用Vue构建一个应用程序。我需要https在本地环境中进行开发和测试。我成功地创建了必要的证书。为了让开发服务器使用它们,我将server.key和server.crt文件复制到项目的根目录中,并将rootCA.pem文件保留在~/.ssh中。我在/etc/hosts中为我的域的alias localhost添加了一个条目,如: 127.0.0.1 example.test 然后,我在项目根目录中编辑了vue.config.js,如下所示: const fs=require('fs'))

我正在用Vue构建一个应用程序。我需要
https
在本地环境中进行开发和测试。我成功地创建了必要的证书。为了让开发服务器使用它们,我将
server.key
server.crt
文件复制到项目的根目录中,并将
rootCA.pem
文件保留在
~/.ssh
中。我在
/etc/hosts
中为我的域的alias localhost添加了一个条目,如:

127.0.0.1 example.test
然后,我在项目根目录中编辑了
vue.config.js
,如下所示:

const fs=require('fs'))
module.exports={
开发服务器:{
主机:“example.test”,
https:{
key:fs.readFileSync('./server.key'),
证书:fs.readFileSync('./server.crt'),
ca:fs.readFileSync(process.env.HOME+'/.ssh/rootCA.pem')
}
}
}
这在本地非常有效。我的问题在我的暂存服务器上

我的登台服务器正在运行ubuntu(16.04),并使用
certbot
(LetsEncrypt)安装了一个实际的SSL证书(即非自签名)。我的项目是一个静态前端,因此我使用配置为指向
/dist
目录的
nginx
为其提供服务,并使项目在
staging.example.com
上可用。在我在上面的
vue.config.js
中添加
devServer
config之前,一切都很正常

我期望发生的事情: 当我为登台构建项目时,即

npm run build -- --mode staging
我希望它忽略
devServer
config部分,因为
NODE\u ENV===“production”
(在我的
.ENV.staging
文件中设置)

实际发生的情况: 构建过程失败,抱怨:

Error loading vue.config.js:
Error: ENOENT: no such file or directory, open './server.key'

问题:在为“暂存”或“生产”生成时,如何使生成过程忽略
vue.config.js
devServer
部分?
vue.config.js
不会自动检测环境。作为:

如果需要基于环境的条件行为,或者希望直接改变配置,请使用函数(在设置env变量后将对其进行延迟计算)。函数接收解析的配置作为参数。在函数内部,您可以直接修改配置,也可以返回将被合并的对象

我现在还不清楚如何做到这一点。以下是最终奏效的方法:

const fs = require('fs')

module.exports = {
  configureWebpack: config => {
    if (process.env.NODE_ENV !== 'production') {
      config.devServer = {
        host: 'qzuku.test',
        // https://medium.freecodecamp.org/how-to-get-https-working-on-your-local-development-environment-in-5-minutes-7af615770eec
        https: {
          key: fs.readFileSync('./qzukuDevServer.key'),
          cert: fs.readFileSync('./qzukuDevServer.crt'),
          ca: fs.readFileSync(process.env.HOME + '/.ssh/rootDevCA.pem')
        }
      }
    }
  }
}
希望这有帮助