繁体   English   中英

Vue.js将设置文件排除在捆绑之外

[英]Vue.js exclude settings file from being bundled

我使用的是vue-webpack模板,我创建了一个settings.json文件来存储安装脚本时应该更改的环境变量。

我的settings.json (只存储API服务器的绝对路径):

{
  "apiURL": "//localhost/app/server/API"
}

如何防止文件在生产版本中被缩小/捆绑,以便我可以更改它,下次访问应用程序时将使用更新的文件(无需再次构建)?

在我的应用程序中,我通过require使用此文件:

const SETTINGS = require('../settings.json');

据我所知,通过require它将webpack捆绑为一个模块,但我如何将其包含在我的应用程序中,以便设置文件仍然是我可以编辑的生产版本中的单独文件

是否有更好的格式/方式来存储这些设置(以便可以在生产中编辑它们而无需重新构建)?

您可以在对象中定义这些设置,这些设置可以在webpack.config.js的externals配置中引用。

externals配置选项提供了一种从输出包中排除依赖关系的方法。 相反,创建的捆绑包依赖于该依赖关系在消费者环境中的存在。

例:

externals: {
  appSettings: "appSettings",
  "window.appSettings": "appSettings"
}

appSettings是一个包含您想要操作的环境变量的全局变量。


或者,如果您不喜欢公开全局对象中的设置的方法,则可以执行以下操作:

使用默认设置导出变量,该变量将包含在webpack包中。

export var appSettings = {
  currentSettings: "",
  settings: {},
  getString: function(strName) {
    var sett = this.currentSettings ?
      this.settings[this.currentSettings] :
      appDefaultStrings;
    if (!sett || !sett[strName]) sett = appDefaultStrings;
    return sett[strName];
  },
  getSettings: function() { //Gets all available settings
    var res = [];
    res.push("");
    for (var key in this.settings) {
      res.push(key);
    }
    res.sort();
    return res;
  }
};

export var appDefaultStrings = {
  apiURL: "//localhost/app/server/API"
    //...
}
appSettings.settings["default"] = appDefaultStrings;

然后,您可以要求或导入此变量并使用它,如下所示:

import appSettings from "../path/to/appSettings";

appSettings.getString("apiURL"); //"//localhost/app/server/API"

现在您已启动并运行默认设置,我们将创建包含自定义设置的另一个文件。

import appSettings from "../path/to/appSettings";

export var appProductionSettings = {
  apiUrl: "http://example.com"
    //...
}

appSettings.settings["production"] = appProductionSettings;

您需要做的最后一件事是处理您要使用的设置。 我还没有使用过vue.js,但希望这会引导你朝着正确的方向前进:

import appSettings from "../path/to/appSettings";

export class MyApp {
  constructor() {
    this.settingsValue = "";
  }
  get settings() {
    return this.settingsValue;
  }
  set settings(value) {
    this.settingsValue = value;
    appSettings.currentSettings = value;
  }
}

更改设置:

import "../path/to/productionSettings";

var app = new MyApp();

app.settings = "production";

使用此方法,您可以根据需要创建和使用任意数量的设置文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM