我开发了一个类星体应用程序,并使用“dotenv”插件来解析 .env 文件。有时我需要对变量进行临时更改,例如仅对当前运行使用不同的后端地址,并且我不想更改 .env 文件。如果有办法在控制台中传递环境变量?
例如
quasar dev BACKEND='http://localhost'
我开发了一个类星体应用程序,并使用“dotenv”插件来解析 .env 文件。有时我需要对变量进行临时更改,例如仅对当前运行使用不同的后端地址,并且我不想更改 .env 文件。如果有办法在控制台中传递环境变量?
例如
quasar dev BACKEND='http://localhost'
我的解决方案:
在 quasar.conf.js 中:
const envparser = require('./src/envparser')
...
build: {
env: envparser(),
...
./src/envparser:
const DotEnv = require('dotenv')
const parsedEnv = DotEnv.config().parsed
const argEnv = {}
process.argv.forEach((v, k) => {
if (v.indexOf('--env.') === 0) {
argEnv[v.substring(6)] = process.argv[k + 1]
}
})
module.exports = function () {
for (let key in parsedEnv) {
if (typeof parsedEnv[key] === 'string') {
parsedEnv[key] = JSON.stringify(parsedEnv[key])
}
}
for (let key in argEnv) {
parsedEnv[key] = JSON.stringify(argEnv[key])
}
return parsedEnv
}
所以现在你可以使用 .env 文件来定义环境变量, .env.prod 和 .env.dev 用于生产和开发模式,这些将被控制台参数覆盖:
quasar dev --env.VARIABLE "Value"
我的解决方案:
在我的 Dockerfile 中,我导出了我的环境变量
ENV PROTOCOL='https://'
ENV HOST='example.com.br'
ENV PORT=443
然后,我在文件 config/index.js 中获取 process.env 中的变量
像这样的东西:
module.exports = {
NODE_ENV: '"production"',
PROTOCOL: JSON.stringify(process.env.THRUST_PROTOCOL),
HOST: JSON.stringify(process.env.THRUST_HOST),
PORT: JSON.stringify(process.env.THRUST_PORT)
}
我希望能有所帮助