이 게시물에서 영감을 얻었습니다.
이것은 클래식 asp 및 typescript를 사용하여 개발된 샘플 애플리케이션입니다.
때때로 우리는 클래식 ASP에서 실행되는 오래된 애플리케이션에 갇혀 있을 수 있습니다.
TypeScript는 IntelliSense, 리팩토링, 실제 클래스 시스템, 유형 시스템, 컴파일 시간 오류, 자동 완성, jsdocs 등과 같은 개발에 유용한 도구를 추가합니다.
기존 애플리케이션, 공유 코드 및 세션 상태에서 사용할 수 있습니다.
게다가 하는 일도 즐거웠어요 :)
nuget에서 js 및 css 패키지를 가져오려면 패키지 관리자 콘솔에서 Update-Package -Reinstall
명령을 실행하세요.
handlerbars.TypeScript.DefinitelyTyped 패키지는 두 개의 .d.ts 파일을 설치하므로 버전 1.0.0의 경우 해당 파일을 삭제해야 합니다.
IIS Express에서 실행되며 디버그 없이 Visual Studio에서 직접 실행할 수 있습니다.
스크립트는 다음 순서로 클래식 ASP에서 실행됩니다.
<script runat="server">
태그<% %>
내부)<script runat="server">
태그. 포함된 스크립트 이후에 main()
함수를 실행할 수 있도록 현재 기본 언어는 <%@ language="VBScript" %>
지시문을 사용하여 VBScript로 유지되었습니다.
asp와 함께 typescript를 사용하는 한 가지 옵션은 콘텐츠를 asp 태그로 묶고 확장자를 .asp로 변경하는 빌드 프로세스에 단계를 추가하는 것입니다.
원천
클래식 ASP를 대상으로 할 때 TypeScript에 대한 몇 가지 중요한 구성은 다음과 같습니다.
{
"compilerOptions" : {
"target" : "es3" ,
"lib" : [ "es5" , "scripthost" ] ,
"module" : "none"
}
}
ASP는 VBScript 또는 Microsoft의 javascript 버전인 JScript로 실행될 수 있으며 ECMAScript 3 사양을 준수합니다.
TypeScript가 사용하는 기본 유형 라이브러리에는 요청 및 응답 개체를 정의하는 새로운 브라우저 API가 포함되어 있으므로 ASP의 API로 이러한 개체를 정의할 수 있도록 사용하려는 라이브러리를 정의해야 합니다.
마지막으로 ASP는 가능한 모듈 출력을 지원하지 않습니다.
생성된 서버 측 코드에는 IIS가 일반적으로 클라이언트에 보내는 .js 확장자가 있습니다. ASP의 소스를 숨기려면 다음 구성을 추가할 수 있습니다.
<!-- IIS 7+ -->
< system .webServer>
< security >
< requestFiltering >
< hiddenSegments >
< add segment = " src " />
</ hiddenSegments >
</ requestFiltering >
</ security >
</ system .webServer>
이 구성은 IIS 6 이하에서는 작동하지 않습니다.
이 애플리케이션의 경우 필요한 js 소스를 포함하는 다른 .asp 파일을 사용하는 대신 단일 진입점인 Default.asp와 함께 mvc 워크플로를 사용하고 QueryString 매개 변수를 사용하여 라우팅했습니다.
또 다른 옵션은 404 오류를 asp 파일로 리디렉션하여 시도된 경로를 읽는 라우팅을 수행하는 것입니다.
세션 또는 애플리케이션 상태를 설정하기 위해 클래식 ASP가 사용하는 구문은 TypeScript에서 지원되지 않습니다.
<%
Session("user_id") = 1
Application("connectionstring") = "some string"
%>
대안은 이를 설정하는 함수를 정의하고 TypeScript에서 인터페이스를 선언하는 것입니다. 예:
function setSession ( key , val ) {
Session ( key ) = val ;
}
그런 다음 타이프스크립트에서 다음을 수행합니다.
declare function setSession ( key : string , val : any ) : void ;
불행하게도 JScript의 Error 개체는 stack 속성을 정의하지 않으므로 개체의 메서드가 typescript에 의해 익명 함수로 내보내지기 때문에 스택 추적을 구축하는 쉬운 방법이 없습니다.
이 애플리케이션은 템플릿 작성을 위해 핸들바를 사용하고 날짜 처리를 위해 Moment.js를 사용합니다. 둘 다 전역 개체가 존재하지 않기 때문에 클래식 ASP와 호환되지 않는 UMD(Universal Module Definition) 구조를 가지고 있습니다.
클래식 ASP JScript에서 클로저의 변수는 선언되지 않고 정의된 경우 전역 범위로 "내보냅니다". 예:
( function ( ) {
var localFn = function ( ) {
// ...
} ;
// classic asp export
// this makes globalFn available in the global scope
globalFn = localFn ;
} ) ;
이러한 동작으로 인해 두 라이브러리의 UMD 검사를 이 "내보내기" 구문으로 대체해야 합니다.
DOM에 종속되지 않은 라이브러리만 작동한다는 점에 유의하세요.