【问题标题】:How to not minify a single variable?如何不缩小单个变量?
【发布时间】:2017-08-23 05:20:51
【问题描述】:

在我的例子中,使用 AngularJS,我有一个 json,其中包含一些可以在控制器中使用的配置。 当我缩小应用程序并且控制器变量名称与 json 不匹配时,就会出现问题。

有没有办法不缩小单个变量?

我的代码: 设置.json

{
   "settings": {
      "adIndex": 3
    }
}

控制器:

function settingsService($q, $http, $log) {
  var settings = {
    adIndex: 0
  };

  var service = {
    init: init,
    getAdIndex: getAdIndex
  };
  return service;

  function init() {
    var deferred = $q.defer();

    $http.get('assets/settings/settings.json').then(function(response) {
      var loaded = response.data.settings;
      if (loaded) {
        settings = angular.extend(settings, loaded);
      }
      deferred.resolve(settings);
    }, function(error) {
      $log.info('Error loading settings', error);
      deferred.reject(error);
    });

    return deferred.promise;
  }

  function getAdIndex() {
    return settings.adIndex;
  }
}

更新

根据您的建议,我对代码进行了一些更改,但问题尚未解决。 控制器中的代码现在是:

function settingsService($q, $http, $log) {
  var settings = {
    'adIndex': 0
  };

  var service = {
    init: init,
    getAdIndex: getAdIndex
  };
  return service;

  function init() {
    var deferred = $q.defer();

    $http.get('assets/settings/settings.json').then(function(response) {
      var loaded = response.data['settings'];
      if (loaded) {
        settings = angular.extend(settings, loaded);
      }
      deferred.resolve(settings);
    }, function(error) {
      $log.info('Error loading settings', error);
      deferred.reject(error);
    });

    return deferred.promise;
  }

  function getAdIndex() {
    $log.debug('Object: ', settings); // result: settings { adIndex: 3 }
    $log.debug('Value: ', settings['adIndex']); // result: 0 
    return settings['adIndex'];
  }
}

“adIndex”如何在日志中有 2 个不同的值?

【问题讨论】:

  • 这一切都取决于您如何缩小代码?你用的是什么缩小器?
  • 您正在尝试将硬编码的变量名称与 JSON 返回匹配?听起来很脆弱……
  • 使用字符串,例如settings['adIndex']它不会修改那个
  • 不清楚这里有什么问题。缩小后哪个名称不匹配?
  • 旁注:您在这里使用的是explicit promise creation antipattern

标签: javascript angularjs json minify bundling-and-minification


【解决方案1】:
  var settings = {
    "adIndex": 0  // quotes around the key, JSON style
  };

不是 100% 确定你的 minifier 将如何处理这个问题,但通常它们不能修改字符串值。如果上述方法不起作用,您可以做一些更详细的操作:

var settings = {};
settings['adIndex'] = 0;

在这种情况下,变量settings 将被缩小,但字符串'adIndex' 将保持不变。

【讨论】:

  • 感谢解答,但未解决。问题已更新!
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2012-08-05
  • 2014-01-11
相关资源
最近更新 更多