Come posso definire moduli dipendenti a macchina Moduli AMD

voti
6

Come posso definire i moduli dipendenti in un modulo con AMD tipografico, tra cui, ad esempio, jQuery e sottolineatura. Utilizzando JavaScript che faccio, per esempio, in questo modo:

define('moduleA',
    ['jquery', 'underscore'], function ($, _) {
    }
});

Come può fare questo in modo che il compilatore dattiloscritto genera questo codice.

È pubblicato 08/10/2012 alle 14:44
fonte dall'utente
In altre lingue...                            


2 risposte

voti
3

Con l'attuale implementazione del compilatore (0.8) il modo per ottenere ciò che si sta cercando è la seguente.

test.ts:

import jquery = module("jquery");
import underscore = module("underscore");

export module A {
    console.log(jquery.$ + underscore._);
}

jquery.ts:

export var $ = null;

underscore.ts:

export var _ = null;

se si compila test.ts con l'interruttore del modulo:

tsc --module AMD test.ts

verrà generato il seguente file JS per voi:

define(["require", "exports", "jquery", "underscore"], function(require, exports, __jquery__, __underscore__) {
    var jquery = __jquery__;
    var underscore = __underscore__;
    (function (A) {
        console.log(jquery.$ + underscore._);
    })(exports.A || (exports.A = {}));
})

Si noti che se si mette istruzioni di importazione all'interno del modulo sarà nota codegen correttamente a causa di un bug. Il team sta attualmente lavorando su una correzione su tale elemento, ma si spera che non si dovrebbe bloccare.

Risposto il 08/10/2012 a 17:22
fonte dall'utente

voti
2

Questo attualmente non funziona correttamente a macchina a causa di un bug nel compilatore (vedi StackOverflow ). Che cosa si avrebbe bisogno di fare è definire un modulo moduleAche le importazioni jquerye underscore, e quindi compilare che con -module amd. In sostanza, si avrebbe bisogno i seguenti tre file:

moduleA.ts

export module moduleA {
    import jquery = module("jquery");
    import underscore = module("underscore");
    console.log(jquery.jquery);
    console.log(underscore.underscore);
}

jquery.ts

export module jquery {
    var jquery = "jquery";
}

underscore.ts

export module underscore {
    var underscore = "underscore";
}

Compilazione quelle tre file con tsc -module amdi rendimenti il seguente codice per moduleA.js:

define(["require", "exports"], function(require, exports) {
    (function (moduleA) {
        var jquery = __jquery__;

        var underscore = __underscore__;

        console.log(jquery.jquery);
        console.log(underscore.underscore);
    })(exports.moduleA || (exports.moduleA = {}));

})

Come ho detto sopra, a causa di un bug nel compilatore, questo codice è in realtà errato e si lamenterà di perdere __jquery__in fase di esecuzione. Tuttavia, una volta che questo errore è fissato il amdcaricatore di node.jsdovrebbe essere in grado di caricare i moduli.

Risposto il 08/10/2012 a 15:05
fonte dall'utente

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