我曾经使用dotenv库来使用. env文件,但我不得不更改runtimeConfig,因为我意识到这很容易暴露我的项目密钥。
在我最近的项目中,我使用了nuxt "^2.14",模式是SPA。所以我只在nuxt.config.ts中使用了"publicRuntimeConfig"。
.环境
Test_BASE_URL:'https://test.org'
nuxt.config.ts
export default {
publicRuntimeConfig:{baseURL: proccess.env.Test_BASE_URL||''}
}
我可以像那样在vue文件中使用env。
sample.vue
<script>
export default {
mounted(){
console.log(this.$config.baseURL)
}
}
</script>
但是我不能在存储状态下使用"$config"。我试着写它,但是它总是返回"undefied"
index.ts
export const state = (context) => ({
url:context.$config
})
我引用了这个家伙的solutions,并通过actions方法更改了state的值。我使用了SPA,所以我制作了像'nuxtServerInit'这样的方法作为插件。
插件/客户端初始化. ts
import {Context} from "@nuxt/types";
export default function (context:Context) {
context.store.dispatch('initEnvURL',context.$config)
}
index.ts
interface State {
testURL: string
}
const state = () => ({
testURL:''
})
const mutations = {
setTestURl(state:State,config:any) {
state.testURL = config.baseURL
}
const actions = {
initEnvURL({commit},$config) {
commit('setTestURl',$config)
}
}
export default {state,mutations,actions}
我成功地通过上面的操作方法改变了状态值,但是我不知道为什么"context"不能直接使用store/state对象。有人知道如何在store/state中使用$config吗?或者是不可能通过上面的操作方法使用$config的唯一方法吗?
2条答案
按热度按时间3df52oht1#
这是因为在Vuex中,只有动作才能接收到应用上下文,而State、Mutations和Getter在设计上无法访问它。
初始状态应该是无上下文的,即其值不依赖于运行时执行。
变异是无状态的,它们只是接受一个参数并更新状态。仅此而已。上下文相关的参数应该来自调用者。
getter只是被动的状态转换,不应该依赖于上下文属性,否则会扰乱Vuex模块的状态。
所以,是的,你必须做的是在
nuxtServerInit
操作中初始化你的商店(或从SPA应用程序的插件):vq8itlhq2#
即使使用
@nuxt/types
,它也不会通过类型系统显示。在
store/index.ts
或store/module.ts
中访问它,如下所示:我的nuxt.config.js看起来像: