Domanda: C'è un modo per importare jquery in un modulo TypeScript utilizzando il supporto AMD (tramite il compilatore) in modo che includa jquery come dipendenza?Importa jQuery e altre librerie di terze parti in TypeScript come moduli utilizzando AMD
La chiave è ottenere l'istruzione import, che rende il modulo dipendente dall'istruzione define (vedi sotto).
define(["require", "exports", 'dataservice', 'jquery', 'knockout'],
function(require, exports, __ds__, $ , ko) {
...
}
)
dettagli: voglio importare jQuery (e altre librerie 3a parte) come moduli dattiloscritto con AMD. L'obiettivo è farli apparire come una dipendenza nell'elenco require
. Tuttavia, l'unico modo per fare in modo che TypeScript lo faccia è avere un'istruzione import
. E per avere un'importazione hai bisogno di un modulo da importare. Ma ... non c'è nessun modulo jquery a cui puntare. a.
Soluzioni alternative:
- posso fare riferimento al .d.ts e precarico jquery nei main.js per require.js, ma questo significa precarica tutte le biblioteche 3rd party. Non è terribile, ma non è l'ideale perché non sfrutta ciò che possiamo già fare con JavaScript e AMD.
- Posso creare un modulo per ogni libreria di terze parti e avvolgerlo, ma poi ottengo qualcosa come $. $. Il che è anche peggio, IMO (e Irisk scrivendo il codice modulo sbagliato per ognuno di questi e uscendo dalla sincronizzazione).
Quindi per ora sto solo precaricando jquery nel main.js. ma di nuovo, ma questo non è l'ideale. Dovrebbe farlo per qualsiasi libreria come knockout, backbone, ecc. Che non ha alcun modulo.
Qualche suggerimento migliore o qualcosa che mi manca?
Aggiornamento/Chiarimento:
posso anche utilizzare spessori nella configurazione per le dipendenze tra le librerie. Ma questo precarica ancora quelli di terze parti. Esempio:
require.config({
baseUrl: '../',
paths: {
'jquery': 'lib/jquery-1.7.2',
'underscore': 'lib/underscore'
},
shim: {
jquery: {
exports: '$'
},
underscore: {
exports: '_'
}
}
});
Per quello che vale, li sto solo caricando tutti nel file main.js (o il mio equivalente). È un po 'brutto, ma funziona. –
Ken - Sì, questo è fondamentalmente quello che sto facendo con quelli di terze parti pre-caricandoli. Mi sento solo sporco quando sappiamo che possiamo fare meglio in JavaScript. –
concordato. Il sistema dei moduli in TS sembra ancora un po 'grezzo - un po' come il resto del linguaggio :-). Speriamo che i miglioramenti stiano arrivando. –