2014-09-11 1 views
4

Я использую ASP.Net-связывание & minification (System.Web.Optimization) в проекте AngularJS.Есть ли способ предотвратить переименование некоторых переменных с помощью asp.net System.Web.Optimization

Все работает отлично, кроме одного сценария.

Мы должны, в это время, eval() выражение. Мы знаем, что это не идеально, хотя в настоящее время нет другого решения, которое бы соответствовало нашим потребностям.

Итак, мы имеем следующую строку:

var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor); 

сейчас, потому что минификация изменила имя нашего переменные и т.д. globalJson не существует, так что эта линия не может.

Есть ли способ, чтобы инструктировать ASP.Net минификацию к не переименовать конкретные переменные?

Update

Исходя из ответа, данного - мы уже использовать безопасный путь углам главного впрыснуть.

директива, где это используется, выглядит следующим образом:

appDirectives.directive('drHasPermissionFor', ['globalJson', function (globalJson) { 
     return { 
      restrict: 'A', 
      link: function (scope, element, attrs) { 
       //code ..... 

       // how can I reference the injected globalJson here - so that i know it's using the 
       // newly minified name.. 
       var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor); 

//more code...... 
      } 
     }; 
    }]); 

ответ

2

Ok - так коллега придумали решение этой конкретной проблемы.

На самом деле он не отвечает на общий вопрос «можете ли вы сказать, что оптимизация оставила определенные переменные в одиночку», хотя он исправляет проблему.

Если на первый вопрос будет дан ответ, я с радостью изменю принятый ответ.

На данный момент, это может быть взломан вокруг так:

appDirectives.directive('drHasPermissionFor', ['globalJson', function (globalJson) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 

      // this function will return the minified globalJson 
      function returnGlobalJson() { 
       return globalJson; 
      }; 

      // call this function as part of the eval - works perfectly :) 
      var isValid = eval('returnGlobalJson().Permissions.' + attrs.drHasPermissionFor); 

     } 
    }; 
}]); 
+0

У меня такая же проблема, но решение не помогает мне сообщить, почему функция также минимизируется. –

+0

имя функции 'returnGlobalJson' не получает minified; только переменные и параметры. Таким образом, вы можете быть в безопасности, чтобы оправдать это имя. – Darren

+0

Даренм, используя пучок, .NET 4.5 и пакет - это minificando функции, есть ли какой-либо параметр, а не minificar то же самое? –

1

Угловая имеет механизм для борьбы с минификация таким образом. Вы должны использовать что-то, называемое встроенной аннотацией, as described here.

Это работает, позволяя мининатору минимизировать аннотацию, а затем угловой будет использовать аннотацию, чтобы определить, что такое имя миниатюрной переменной.

Итак, вы можете просто ввести переменную, которую хотите использовать, и использовать мини-переменную.

Там также хорошая статья здесь:

http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/

+0

Спасибо. Мы уже используем мини-безопасную инъекцию в Angular. Я не был особенно ясен в своем вопросе - просто обновил его :) – Darren

+0

55k, и вы даете ссылки только ответы? За позор. – MikeSmithDev

+0

@MikeSmithDev - Когда я изначально был отправлен, в этом вопросе не было достаточной информации, чтобы привести пример, который бы соответствовал тому, что он делает, поэтому все, что я мог сделать, это предоставить общую информацию для него, чтобы выяснить сам. Он добавил дополнительную информацию позже, и, поскольку он уже делал то, что я предлагал, не нужно было приукрашивать. Кроме того, «ссылка только» означает «ссылка только», я дал много объяснений. –