【发布时间】:2019-03-08 21:26:06
【问题描述】:
下午好。
我想知道是否可以将 config.json 文件添加到可以在运行时读取的 Vue CLI 3 项目中,无论是在开发期间还是在生产期间。
config.json 文件将包含一些字符串,应用可以使用这些字符串来动态更改内容,例如显示给用户的视频文件和打印机的 IP 地址。
// config.json
{
"brand": "eat",
"printerIP": "192.168.0.4"
}
我已尝试将文件放在资产文件夹和公用文件夹中。我尝试使用 import 和 require 语句将其导入到 App.vue 的 script lang="ts" 元素中。我正在使用 vue-property-decorator。
// App.vue (<script lang="ts">)
const config = require('../public/config.json');
OR
import config from '../public/config.json';
我通过使用 axios 像 API 一样处理它并使用例如 config.brand 简单地访问变量来访问这些值。
// App.vue (<script lang="ts">)
import axios from 'axios';
@Provide() private brand: string = "";
axios
.get('.config.json')
.then(response => {
this.brand = response.data.brand;
})
OR
this.brand = config.brand;
不幸的是,数据只能在构建时读取并编译成缩小的 JavaScript。这意味着即使用户在构建应用后更新了 config.json 中的变量,应用也不会更新。我需要能够访问构建文件中的 config.json,更新一个值,然后让应用程序在运行时读取新值,而无需再次构建项目。我想知道是否可以这样做。
您能提供的任何帮助将不胜感激。
【问题讨论】:
-
不能把.json文件放到public文件夹里,在你的app初始化过程中导入吗?例如(安装应用时加载 json)
-
你曾经能够让你的 config.json 工作吗?我正在尝试使用相同的技术来配置由 AWS S3 托管的静态 Vue.js 网站,而无需将 AWS 堆栈特定的环境变量编译到缩小的 javascript 代码中,但到目前为止,我无法避免编译时缩小我的静态 config.json 中的变量。
-
在我看来,JavaScript 中的任何变量,无论是直接在 Vue 文件中还是导入的变量,都是在网站构建之前编译的,之后无法更改。 API 调用的结果可以是动态的,因此我的解决方案是将变量保存在 API 调用可以定位的位置。就我而言,我创建了一个 .NET Core Web API 并将我的变量保存在该层中,并在我的 Vue 项目中使用 axios 通过控制器访问它们。
标签: javascript typescript vue.js electron-builder vue-cli-3