Вдохновился этим постом.
Это пример приложения, разработанного с использованием классического asp и машинописного текста.
Иногда мы просто застреваем со старыми приложениями, работающими в классическом asp.
TypeScript добавляет полезные инструменты для разработки, такие как IntelliSense, рефакторинг, реальную систему классов, систему типов, ошибки времени компиляции, автодополнение, jsdocs и многое другое.
Его можно использовать в существующих приложениях, разделяя код и состояние сеанса.
А ещё это было весело :)
Чтобы получить пакеты js и css из nuget, выполните команду Update-Package -Reinstall
из консоли диспетчера пакетов.
Пакет handlebars.TypeScript.DefiniteTyped устанавливает два файла .d.ts, один для версии 1.0.0 необходимо удалить.
Он работает на IIS Express и может быть выполнен непосредственно из Visual Studio (без отладки).
Скрипты выполняются в классическом asp в следующем порядке:
<script runat="server">
не соответствующие языку по умолчанию;<% %>
);<script runat="server">
, соответствующие языку по умолчанию. Чтобы иметь возможность выполнять функцию main()
после включенных скриптов, текущий язык по умолчанию был сохранен как VBScript с директивой <%@ language="VBScript" %>
.
Одним из вариантов использования машинописного текста с asp может быть добавление в процесс сборки шага, который включает содержимое в теги asp и меняет расширение на .asp.
Источник
Некоторые важные конфигурации машинописного текста при настройке классического asp:
{
"compilerOptions" : {
"target" : "es3" ,
"lib" : [ "es5" , "scripthost" ] ,
"module" : "none"
}
}
ASP может работать либо с VBScript, либо с JScript, версией javascript от Microsoft, совместимой со спецификацией ECMAScript 3.
Библиотеки типов по умолчанию, которые использует Typescript, включают новые API-интерфейсы браузера, которые определяют объекты Request и Response, поэтому нам нужно определить библиотеки, которые мы хотим использовать, чтобы иметь возможность определять эти объекты с помощью API ASP.
Наконец, asp не поддерживает ни один из возможных выходов модуля.
Сгенерированный серверный код будет иметь расширение .js, которое IIS обычно отправляет клиенту. Чтобы скрыть источники asp, мы можем добавить следующую конфигурацию:
<!-- IIS 7+ -->
< system .webServer>
< security >
< requestFiltering >
< hiddenSegments >
< add segment = " src " />
</ hiddenSegments >
</ requestFiltering >
</ security >
</ system .webServer>
Эта конфигурация не работает для IIS 6 или более ранней версии.
В этом приложении вместо использования разных файлов .asp, включая необходимые исходные коды js, использовался рабочий процесс mvc с одной точкой входа, Default.asp, маршрутизацией с параметрами QueryString.
Другой вариант — перенаправить ошибки 404 в файл asp, который выполняет маршрутизацию, считывая выбранный путь.
Синтаксис, который классический asp использует для настройки состояния сеанса или приложения, не поддерживается машинописным текстом:
<%
Session("user_id") = 1
Application("connectionstring") = "some string"
%>
Альтернативой было бы определить функцию для их установки и объявить интерфейс в машинописном языке. Например:
function setSession ( key , val ) {
Session ( key ) = val ;
}
Затем в машинописном тексте:
declare function setSession ( key : string , val : any ) : void ;
К сожалению, объект Error в JScript не определяет свойство стека, поэтому нет простого способа построить трассировку стека, поскольку методы объекта создаются машинописным скриптом как анонимные функции.
Это приложение использует Handlebars для создания шаблонов и Moment.js для обработки дат. Оба имеют структуру UMD (универсальное определение модуля), которая несовместима с классическим asp, поскольку глобального объекта не существует.
В классическом asp JScript переменная в замыкании «экспортируется» в глобальную область видимости, если она определена без объявления. Например:
( function ( ) {
var localFn = function ( ) {
// ...
} ;
// classic asp export
// this makes globalFn available in the global scope
globalFn = localFn ;
} ) ;
Из-за такого поведения необходимо заменить проверки UMD в обеих библиотеках этим «экспортирующим» синтаксисом.
Обратите внимание, что работать будут только библиотеки, не зависящие от DOM.