Comment exiger jquery par AMD dactylographiée

voix
16

Comment puis-je requiers le module AMD jquery pour mon module dactylographiée. Par exemple, disons que la structure de répertoire pour les scripts ressemble à ceci:


    jquery-1.8.2.js
    jquery.d.ts
    module.ts
    require.js

Je veux que le fichier js généré à partir module.ts d'exiger jquery-1.8.2.js être chargé via require.js.

Actuellement, je suis:


    import jquery = module ( 'jquery') 

Il en résulte le nom « jquery » n'existe pas dans la portée actuelle.

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


5 réponses

voix
26

POUR LA MACHINE A ECRIRE 1.7+

Il semble que la norme est en train de changer à nouveau, où la méthode ci - dessous 0.9+ fonctionne toujours, mais avec ES6 à venir , le chargement du module suivant pourrait être utilisé. (référence: https://github.com/TypeStrong/atom-typescript/issues/237#issuecomment-90372105 )

import * as $ from "jquery";

et même partielles

import {extend} from "jquery"; 

(ce qui exige encore les jquery.d.ts, si DNT est installé - tsd install jquery)

installer DNT: npm install tsd -g

POUR LA MACHINE A ECRIRE 0.9+

/// <reference path="../../typings/jquery/jquery.d.ts" />
import $ = require('jquery');

//Do your stuff

Et aussi, si vos jquery.d.ts ne définissent pas un module externe, ajoutez ce qui suit à jquery.d.ts:

declare module "jquery" {
    export = $;
}
Créé 01/09/2013 à 21:04
source utilisateur

voix
8

Je pense que beaucoup de confusion autour de cela est dû à jQuery pas vraiment agir comme un module externe, ce qui empêche l'utilisation d'une importdéclaration. La solution est tout à fait propre, simple et assez élégant pour ne pas se sentir comme un travail autour.

Je l' ai écrit un exemple simple d' utilisation de RequireJS et jQuery dactylographiée , qui fonctionne comme suit ...

Vous prenez les définitions de type de Definitely typées pour RequireJS et jQuery.

Vous pouvez maintenant utiliser RequireJS premières avec le typage statique à l'intérieur du fichier dactylographiée.

app.ts

///<reference path="require.d.ts" />
///<reference path="jquery.d.ts" />

require(['jquery'], function ($) {
    $(document).ready(() => {
        alert('Your code executes after jQuery has been loaded.');
    });
});

Et puis il vous suffit d'ajouter la balise unique de script à votre page:

<script data-main="app" src="require.js"></script>

Les avantages par rapport aux autres solutions?

  1. Vous pouvez mettre à jour jQuery et RequireJS indépendamment
  2. Vous ne devez pas compter sur le projet de mise à jour shim
  3. Vous ne devez pas charger manuellement jQuery (ou toute autre chose qui n'est pas « comme un module » que vous avez un .d.tsfichier)
Créé 26/01/2013 à 14:44
source utilisateur

voix
6
  1. Prenez les jquery.d.ts de base de la source TS ( TypeScriptFile )
  2. Déplacer les () déclarations du JQueryStatic dans un module comme celui-ci:
  3. dans votre module de code jQuery importer le:

import $ = module("jquery");

declare module "jquery" {
   export function (selector: string, context?: any): JQuery;
   export function (element: Element): JQuery;
   export function (object: { }): JQuery;
   export function (elementArray: Element[]): JQuery;
   export function (object: JQuery): JQuery;
   export function (func: Function): JQuery;
   export function (): JQuery;
}
  1. Compiler votre module comme AMD (TSC --module amd my_code.ts)
  2. Utilisez requirejs pour composer votre application sur le côté client avec la section de configuration suivante:

requirejs.config({
   paths: {
      'jquery': 'js/jquery-1.8.2.min'
   }
});
Créé 09/10/2012 à 15:59
source utilisateur

voix
1

Tout d' abord obtenir le ( require-jquery ) du repo GitHub officiel. Après ce votre répertoire ressemblera:

require-jquery.js
jquery.d.ts
main.ts
main.js
test.html

À l'heure actuelle la meilleure façon de travailler avec des modules JQuery et AMD sur tapuscrit est d'écrire ce qui suit sur les main.ts:

///<reference path="jquery.d.ts" />
declare var require;
require(["jquery"], function($:JQueryStatic) {
    $('body').append('<b>Hello JQuery AMD!</b>');
});

Et l'appeler de votre test.html:

<!DOCTYPE html>
<html>
    <head>
        <script data-main="main" src="require-jquery.js"></script>
    </head>
    <body>
        <h1>TypeScript JQuery AMD test</h1>
    </body>
</html>

J'espère que cela t'aides!

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

voix
0

Vous faites référence à des modules externes par chemin et le nom (moins l'extension .js), ou tout simplement par nom de fichier si elles sont globales. Dans votre cas, vous devriez le faire à l'intérieur de module.ts:

import jquery = module('./jquery-1.8.2');

Rappelez - vous de compiler avec --module AMDdepuis par défaut , vous obtenez le code qui utilise la CommonJS requirefonction.

Créé 01/11/2012 à 01:37
source utilisateur

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