Plesk Obsidian 18.0.48 上的 Node.js 14.21.1 上的 Nuxt v2.15.8
我正在尝试在 Plesk 的 nodejs 模块中使用环境变量。 但似乎我无法在构建期间访问变量。
我建立了一个基本的 nuxt 项目:
npm init nuxt-app
为了能够将它与我使用的 Plesk nodejs 模块一起使用:
npm i --save nuxt-start
如果我尝试在 nuxt.config.js 中访问这些变量,它们是未定义的。如果我改用 .env 文件,这有效。
proxy: {
'/api/': {
target: process.env.WP_BACKEND_URL || 'https://fallback.domain.tld',
},
},
在 publicRuntimeConfig(也在 nuxt.config.js 中)使用它工作正常:
publicRuntimeConfig: {
wpBackendUrl: process.env.WP_BACKEND_URL || 'https://fallback.domain.tld',
},
更新 1:
好的,我做了一些进一步的测试,看起来它运行正常。 这就是让我失望的原因。
在构建过程中,我得到以下输出:
> [email protected] build
> nuxt build
ℹ [HPM] Proxy created: /api/ -> https://fallback.domain.tld
ℹ [HPM] Proxy rewrite rule created: "^/api/" ~> "/wp-json/wp/v2/"
ℹ Production build
ℹ Bundling only for client side
ℹ Target: static
这表明 /api/ 指向错误的(后备)url。 但是如果我稍后做一个 axios 得到这个代理,它实际上指向正确的 url (https://wp.domain.tld)
更新 2:
同样发生在这里,只是在这种情况下,URL 在运行时不会改变。
image: {
domains: [
process.env.WP_BACKEND_URL || 'https://fallback.domain.tld',
]
},
我认为通过 Plesk 设置的自定义环境变量在构建时不可用,但在运行时可用。这导致了我遇到的问题。如果我使用 .env 文件,环境变量在构建和运行时可用。
不知道如何解决这个问题或解决它。所以我想我又开始使用 .env 文件了。
我有一个带有 Plesk Obsidian 的 CentOS7 服务器,我的 nuxt 应用程序可以使用自定义环境变量而不是 .env 文件完美构建。
但是最近,我用运行 Ubuntu 20.x 的较新服务器替换了服务器,Plesk 似乎无法再通过环境变量读取,尽管我不明白为什么:/
将 .env 文件添加到应用程序根目录让我可以毫无问题地构建。
无论如何,对于 nuxt 2,您必须使用 dotenv 来访问环境变量。
// nuxt.config.js
require('dotenv').config
export default {
proxy: {
'/api/': {
target: process.env.WP_BACKEND_URL || 'https://fallback.domain.tld',
},
},
}