โมดูล 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
