Пишем код

Заметки о .net разработке

Валидация JavaScript в ASP.Net MVC проекте — еще один велосипед или jsvalidator.codeplex.com

without comments

В предыдущей заметке я рассматривал существующие решения «псевдо-компиляции» яваскрипта и интеграции этих решений в asp.net проекты.

В итоге не найдя ничего идеального и решив, что собственный велосипед здесь не помешает, я и написал утилиту под названием jsvalidator. Найти её можно на codeplex, там же есть и краткое описание установки и конфигурирования. Данная заметка, по сути, будет переводом «официальной документации» собственного же сочинения :)

Если коротко, то jsvalidator это build-step с json-like конфигурационным файлом, проверяющая яваскрипт с помощью java-библиотеки google closure. Из этого следует и первое требование — для работы утилиты необходима установленная на компьютере java (с java.exe добавленным в системные пути (system PATH)).

После интеграции утилиты на каждый билд в вашей Visual Studio будет нечто вроде:

(в данном случае утилита сообщает нам о необъявленной переменной asd, по двойному клику на ошибке откроется js-файл на строчке с ошибкой, как мы и привыкли).

Для работы JsValidator’a необходимо установить java и добавить java.exe в системный PATH.
Для интеграции jsvalidator’a в проект достаточно установить nuget-пакет JsValidator. Если вы не используете нугет, то можно все шаги, которые пакет сделает автоматически, проделать вручную:

  1. Скачать бинарники библиотеки и распаковать например в папку $(SolutionDir)/JsValidatorBin.
  2. Создать конфигурационный файл в ASP.Net проекте (например, в Scripts/jsvalidator/config.js). В простейшем случае он может выглядеть так:
    { "inputs": [ "../_test.js" ]  }
    

    Путь к файлу _test.js может быть заменен на путь к любому js-файлу вашего проекта (или папке с js-файлами). Все пути должны указываться относительно расположения конфигурационного файла config.js.

  3. Добавить JsValidator как post-build-event (Project/Properties/Build events/Post-build event command line) к вашему asp.net проекту. Строка post-build-event’a может выглядеть так:
    "$(SolutionDir)JsValidatorBin\jsvalidator.exe" "$(ProjectDir)Scripts\jsvalidator\config.js"
    

    (если вы распаковывали jsvalidator в пути отличные от примеров, то пути нужно будет исправить)

  4. Вот и всё! Скомпилируйте ваш проект и убедитесь, что в ваших яваскриптах ошибок нет :)

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

{
    inputs: [ "../../Scripts/zw_Runtime.js", "../../Scripts/UC/", "../../Scripts/jquery.common.js"],
    externs: ["//jquery-1.7.js"],
    IgnoreAllWarnings: "true",
    Warnings: [".* is never defined"]
}

Расшифрую, за что отвечает каждый из параметров:

  • inputs (массив строк). Специфицирует пути к файлам/папкам для проверки. Самая простая, очевидная и нужная опция :)
  • externs (массив строк). Специфицирует внешние библиотеки, необходимые для валидации (jquery, mootols, и.т.д.). Аналог параметра externs в google closure. У гугла есть ряд «документированных» версий популярных библиотек, подготовленных к подключению в качестве внешних. Библиотеки из этого источника могут быть использованы с помощью префикса «//». В примере выше мы говорим, что в наших файлах возможно использование библиотеки jquery версии 1.7.
  • IgnoreAllWarnings (bool). «true» или «false» (по умолчанию — «false»). Во время компиляции closure compiler находит в js коде ошибки и предупреждения. При выставлении флага в true все предупреждения будут игнорироваться (и не будут отображаться в VS в секции warnings). Обычно, «предупреждений» достаточно много, и я обычно выставляю значение флага в true, предварительно конвертировав нужные мне «предупреждения» в «ошибки» (с использованием опции Warnings)
  • Warnings (массив строк). Список регекспов; подходящие под регексп «предупреждения» переводятся в статус «ошибок».

Есть еще некоторые опции, которые не упомянуты в примере, но могут оказаться полезными:

  • TreatNoJavaAsWarning (bool). Значения «true» или «false» (по умолчанию — «false», то есть при отсутствии на компьютере установленной Java будет сгенерирована ошибка)
  • IgnoreWarnings (массив строк). Список регекспов, подходящие под регексп «предупреждения» отметаются.

Есть и некоторые другие параметры, которые зеркалируют параметры closure compiler’a. Изменение этих параметров обычно не требуется, они описаны детальнее на странице проекта (CompilationLevel, WarningLevel, Ccargs).

Для упрощения использования в ближайшее время планирую собрать nuget-пакет.
Upd.: пакет собран — https://nuget.org/packages/JsValidator/
[/code]
(если вы распаковывали jsvalidator в пути отличные от примеров, то пути нужно будет исправить)

Опубликовать в Facebook
Опубликовать в Google Plus

Written by Shaddix

Январь 10th, 2012 at 3:01 пп

Leave a Reply