ค้นหาเว็บไซต์

โมดูล Typescript AMD ใน Visual Studio


ฉันกำลังเริ่มต้นกับ TypeScript โดยใช้ Visual Studio 2012 Ultimate ฉันได้เปลี่ยน MSBuild ของฉันรวมถึงแท็ก --module amd ในคำสั่งคอมไพเลอร์ คอมไพเลอร์เริ่มสร้างโมดูล AMD

ฉันได้รวม RequireJS จาก Nuget Packages ไว้ในโครงการของฉันและรวมบรรทัดนี้ไว้ใน HTML หลักของฉัน:

<script type="text/javascript" data-main="scripts/SiteMaster"  src="scripts/require.min.js"></script>

ฉันมีโมดูลสองตัวคือ SiteMaster และ Authenticate โมดูล SiteMaster นั้นเรียบง่าย:

export module SiteMaster {
    import auth = module("Authenticate");
    auth.Authenticate.run();
}

มันเพียงแค่นำเข้าโมดูล Authenticate และเรียกใช้ฟังก์ชัน run() ไฟล์ js สำหรับ SiteMaster เป็นแบบนี้:

define(["require", "exports"], function(require, exports) {
(function (SiteMaster) {
    var auth = __auth__;

    auth.Authenticate.run();
})(exports.SiteMaster || (exports.SiteMaster = {}));

})

ปัญหาคือเมื่อฉันเรียกดูวิธีแก้ปัญหา ฉันได้รับข้อผิดพลาด:

Microsoft JScript runtime error: '__auth__' is undefined

ฉันจะแก้ปัญหานี้ได้อย่างไร ???

ขอบคุณล่วงหน้า

คำตอบ #1

ขอบคุณที่หยิบเรื่องนี้ขึ้นมานะ mvbaffa!

ในตัวอย่างของ Valentin ถ้าคุณเปลี่ยนไฟล์ SiteMaster.ts เป็น:

import auth = module("Authenticate");
export module SiteMaster {
    auth.Authenticate.run();
}

โดยการย้ายคำสั่งนำเข้ามาไว้ข้างนอกการประกาศโมดูล มันจะสร้างโค้ด JS ที่ถูกต้องได้ ฉันจะเปิดบั๊กบนเว็บไซต์ TypeScript Codeplex และตรวจสอบให้แน่ใจว่าสิ่งนี้ได้รับการแก้ไข คุณสามารถใช้วิธีแก้ปัญหาในคอมไพเลอร์ปัจจุบัน [v0.8] หากนี่เป็นปัญหาที่ขัดขวางคุณ

คำตอบ #2

ฉันค่อนข้างมั่นใจว่านี่เป็นข้อผิดพลาดในตัวคอมไพเลอร์ ฉันสามารถทำให้ปัญหานี้เกิดขึ้นซ้ำได้โดยใช้ไฟล์ซอร์สต่อไปนี้:

Authenticate.ts

export var Authenticate = { 
    run : function() {
        console.log("Run!");
    }
}

SiteMaster.ts

export module SiteMaster {
    import auth = module("Authenticate");
    auth.Authenticate.run();
}

test.html

<html>
    <head>
        <script type="text/javascript" data-main="SiteMaster"  src="http://requirejs.org/docs/release/2.1.0/minified/require.js"></script>
    </head>
    <body>
        <p>Test</p>
    </body>
</html>

ฉันคอมไพล์ไฟล์ไทพ์สคริปต์โดยใช้

tsc --module amd SiteMaster.ts Authenticate.ts

เมื่อฉันเปิด test.html ใน Firefox พร้อมกับ Firebug ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

ReferenceError: __auth__ is not defined
var auth = __auth__;

โค้ดที่คอมไพล์แล้วสำหรับ SiteMaster.js มีดังนี้:

define(["require", "exports"], function(require, exports) {
    (function (SiteMaster) {
        var auth = __auth__;

        auth.Authenticate.run();
    })(exports.SiteMaster || (exports.SiteMaster = {}));

})

จากส่วนข้อกำหนดของภาษา TypeScript 9.4.3 โมดูล AMD ฉันคาดว่าจะมีบางอย่างในแนวทางดังนี้:

define(["require", "exports", "authenticate"], function(require, exports, authenticateModule) {
    (function (SiteMaster) {
        var auth = authenticateModule;

        auth.Authenticate.run();
    })(exports.SiteMaster || (exports.SiteMaster = {}));

})

นี่สอดคล้องกับตัวอย่างในข้อกำหนดของภาษา หากคนอื่นเห็นด้วย เราอาจส่งบั๊กไปยังทีม TypeScript

บทความที่เกี่ยวข้อง