Модули Машинопись AMD в Visual Studio

голоса
4

Я начинаю с машинопись с помощью Visual Studio 2012 Ultimate. Я изменил свой MSBuild, включая --module драм тега в команде компилятора. Компилятор начал генерировать модули AMD.

Я включить в моем проекте RequireJS из NuGet пакетов и включить в моем основном HTML этой строки:

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

У меня есть два модуля Sitemaster и аутентифицировать. Модуль 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

Как я могу решить эту проблему ???

Заранее спасибо.

Задан 06/10/2012 в 19:12
источник пользователем
На других языках...                            


2 ответов

голоса
5

Спасибо, что это до mvbaffa!

На образце Valentin, если вы измените SiteMaster.ts на:

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

перемещая оператор импорта из объявления модуля он будет генерировать правильный код JS. Я открою ошибку на сайте CodePlex машинописи и убедитесь, что это фиксируется. Вы можете сделать обходной путь на текущий компилятор [v0.8], если это проблема блокировки для вас.

Ответил 06/10/2012 в 22:51
источник пользователем

голоса
4

Я в значительной степени уверен, что это ошибка в компиляторе. Я воспроизвел этот вопрос, используя следующие исходные файлы:

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 = {}));

})

Судя по спецификации языка раздела машинописи в 9.4.3 AMD модулей я бы ожидать , что - то вдоль линий:

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

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

})

Это в соответствии с примерами, в спецификации языка. Если другие согласны, мы могли бы представить ошибка с командой машинописи.

Ответил 06/10/2012 в 21:10
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more