在 Nuxt 中从 .env 设置开发或生产 api URL
Set development or production api URL from .env in Nuxt
出于某种原因,我的三元语句无法正常工作。如果我 运行 我的 Vue Nuxt 应用程序是这样的
.env
USE_DEV_API='true'
nuxt.config.js
const result = process.env.USE_DEV_API ? process.env.USE_DEV_API + ' true' : process.env.USE_DEV_API + ' false'
结果符合预期:
true true
如果我将 .env
中的 USE_DEV_API
更改为 false:
USE_DEV_API='false'
结果是:
false true
奇怪的是,如果我将 USE_DEV_API
设置为 false,我会得到预期的 false false
结果:
const result = false ? process.env.USE_DEV_API + ' true' : process.env.USE_DEV_API + ' false'
结果:
false false
您的 var env 是一个字符串,而不是布尔值。来自 .env
文件的值将始终为真,因为它是否为空字符串。
因此您可以按如下方式更新您的测试,以便将字符串转换为布尔值:
const result = (process.env.USE_DEV_API === 'true') ? process.env.USE_DEV_API + ' true' : process.env.USE_DEV_API + ' false'
有关详细信息,请参阅 How can I convert a string to boolean in JavaScript?
process.env
发生这种情况是因为 .env 变量设置为 string 'false'
而不是关键字 false
.并且所有 JavaScript 字符串的计算结果为 true
除了空字符串 ''
.
这不仅仅是在 .env 文件中放置引号的问题。问题在于 process.env
的工作方式,您可以在 docs:
中阅读
Assigning a property on process.env will implicitly convert the value to a string.
Nuxt
由于您使用的是 Nuxt,您已经可以访问环境信息,并且可以使用它来自动 select 您的 api:
process.env.NODE_ENV // 'development', 'production'
解决方案
只在 .env 中存储您的 api 网址,例如:
DEV_API=http://mydevapi.com
PROD_API=http://myprodapi.com
(注意不需要引号,因为它都是字符串。)
现在可以测试node环境,自动select正确api:
const dev = process.env.DEV_API;
const prod = process.env.PROD_API;
const api = process.env.NODE_ENV === 'development' ? dev : prod;
这种方式更好,因为您不必在每次构建或 运行 生产时记住切换标志,因为它会自动发生。
出于某种原因,我的三元语句无法正常工作。如果我 运行 我的 Vue Nuxt 应用程序是这样的
.env
USE_DEV_API='true'
nuxt.config.js
const result = process.env.USE_DEV_API ? process.env.USE_DEV_API + ' true' : process.env.USE_DEV_API + ' false'
结果符合预期:
true true
如果我将 .env
中的 USE_DEV_API
更改为 false:
USE_DEV_API='false'
结果是:
false true
奇怪的是,如果我将 USE_DEV_API
设置为 false,我会得到预期的 false false
结果:
const result = false ? process.env.USE_DEV_API + ' true' : process.env.USE_DEV_API + ' false'
结果:
false false
您的 var env 是一个字符串,而不是布尔值。来自 .env
文件的值将始终为真,因为它是否为空字符串。
因此您可以按如下方式更新您的测试,以便将字符串转换为布尔值:
const result = (process.env.USE_DEV_API === 'true') ? process.env.USE_DEV_API + ' true' : process.env.USE_DEV_API + ' false'
有关详细信息,请参阅 How can I convert a string to boolean in JavaScript?
process.env
发生这种情况是因为 .env 变量设置为 string 'false'
而不是关键字 false
.并且所有 JavaScript 字符串的计算结果为 true
除了空字符串 ''
.
这不仅仅是在 .env 文件中放置引号的问题。问题在于 process.env
的工作方式,您可以在 docs:
Assigning a property on process.env will implicitly convert the value to a string.
Nuxt
由于您使用的是 Nuxt,您已经可以访问环境信息,并且可以使用它来自动 select 您的 api:
process.env.NODE_ENV // 'development', 'production'
解决方案
只在 .env 中存储您的 api 网址,例如:
DEV_API=http://mydevapi.com
PROD_API=http://myprodapi.com
(注意不需要引号,因为它都是字符串。)
现在可以测试node环境,自动select正确api:
const dev = process.env.DEV_API;
const prod = process.env.PROD_API;
const api = process.env.NODE_ENV === 'development' ? dev : prod;
这种方式更好,因为您不必在每次构建或 运行 生产时记住切换标志,因为它会自动发生。