Moduli AMD tipografico in Visual Studio

voti
4

Sto iniziando con tipografico utilizzando Visual Studio 2012 ultimo. Ho cambiato il mio MSBuild tra cui il tag amd --module nel comando del compilatore. Il compilatore ha iniziato a generare i moduli AMD.

Ho includere nei miei RequireJS progetto da pacchetti NuGet e includere nel mio HTML principale di questa linea:

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

Ho due moduli SiteMaster e autenticazione. Il SiteMaster modulo è semplice:

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

Importa solo il modulo di autenticazione e chiama la funzione di run (). Il js per SiteMaster è come questo:

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

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

})

Il problema è che quando passo in rassegna la soluzione ricevo l'errore:

Microsoft JScript runtime error: '__auth__' is undefined

Come posso risolvere questo problema ???

Grazie in anticipo.

È pubblicato 06/10/2012 alle 19:12
fonte dall'utente
In altre lingue...                            


2 risposte

voti
5

Grazie per aver portato questo in su mvbaffa!

Sul campione di Valentin se si cambia SiteMaster.ts a:

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

spostando l'istruzione import dalla dichiarazione del modulo verrà generato il codice js corretto. Aprirò un bug sul sito CodePlex dattiloscritto e assicurarsi che questo si fissa. Si può fare la soluzione sul compilatore corrente [v0.8] se questo è un problema di blocco per voi.

Risposto il 06/10/2012 a 22:51
fonte dall'utente

voti
4

Sono più o meno convinto che questo sia un errore nel compilatore. Ho riprodotto il problema utilizzando i seguenti file di origine:

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>

Compilo i dattiloscritti che utilizzano

tsc --module amd SiteMaster.ts Authenticate.ts

Quando ho aperto il test.htmlin Firefox con Firebug, ottengo il seguente errore:

ReferenceError: __auth__ is not defined
var auth = __auth__;

Il codice compilato per SiteMaster.jssi presenta come segue:

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

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

})

A giudicare dalla sezione specifica del linguaggio del dattiloscritto 9.4.3 AMD Moduli mi sarei aspettato qualcosa sulla falsariga di:

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

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

})

Questo è in linea con gli esempi nella specifica del linguaggio. Se altri sono d'accordo, potremmo presentare un bug con la squadra dattiloscritto.

Risposto il 06/10/2012 a 21:10
fonte dall'utente

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