Dactylographiées Modules AMD dans Visual Studio

voix
4

Je commence avec tapuscrit avec Visual Studio 2012 Édition Intégrale. J'ai changé MSBuild y compris la balise amd --module dans la commande du compilateur. Le compilateur a commencé à générer des modules AMD.

J'inclure dans mes RequireJS projet de paquets NuGet et inclure dans mon principal HTML cette ligne:

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

J'ai deux modules SiteMaster et Authentifier. Le module SiteMaster est simple:

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

Il importe que le module Authentifier et appelle la fonction run (). Le js pour SiteMaster est comme ceci:

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

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

})

Le problème est que quand je passe en revue la solution que je reçois l'erreur:

Microsoft JScript runtime error: '__auth__' is undefined

Comment puis-je résoudre ce problème ???

Merci d'avance.

Créé 06/10/2012 à 19:12
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
5

Merci d'avoir soulevé cette mvbaffa!

Sur l'échantillon de Valentin si vous changez SiteMaster.ts à:

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

en déplaçant la déclaration d'importation de la déclaration du module, il va générer le code js correct. Je vais ouvrir un bug sur le site CodePlex dactylographiée et assurez-vous cela se fixe. Vous pouvez faire la solution de contournement sur le compilateur en cours [v0.8] si cela est un problème de blocage pour vous.

Créé 06/10/2012 à 22:51
source utilisateur

voix
4

Je suis à peu près convaincu que cela est une erreur dans le compilateur. J'ai reproduit la question à l'aide des fichiers sources suivantes:

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>

Je compile les dactylographiés à l'aide

tsc --module amd SiteMaster.ts Authenticate.ts

Lorsque j'ouvre le test.htmldans Firefox avec Firebug, je reçois l'erreur suivante:

ReferenceError: __auth__ is not defined
var auth = __auth__;

Le code compilé pour SiteMaster.jsse présente comme suit:

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

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

})

A en juger par la section de spécification de langage de tapuscrit 9.4.3 Modules AMD Je me attends quelque chose le long des lignes de:

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

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

})

Ceci est conforme aux exemples dans la spécification du langage. Si d'autres sont d'accord, nous pourrions soumettre un bug avec l'équipe dactylographiée.

Créé 06/10/2012 à 21:10
source utilisateur

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