Hvordan kreve jquery via AMD i Loggfila

stemmer
16

Hvordan kan jeg kreve jquery AMD-modulen for min Loggfila modul. For eksempel la oss si katalogstruktur for skript ser slik ut:


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

Jeg vil ha den genererte js filen fra module.ts å kreve jquery-1.8.2.js lastes via require.js.

Foreløpig har jeg:


    import jquery = modul ( 'jquery') 

Dette resulterer i Navnet jQuery finnes ikke i dagens omfang.

Publisert på 06/10/2012 klokken 20:40
kilden bruker
På andre språk...                            


5 svar

stemmer
26

FOR Loggfila 1.7+

Det ser ut som standard er i endring igjen, hvor under 0.9+ metoden fortsatt fungerer, men med ES6 kommer følgende modul lasting kunne brukes. (referanse: https://github.com/TypeStrong/atom-typescript/issues/237#issuecomment-90372105 )

import * as $ from "jquery";

og til og med delvis de

import {extend} from "jquery"; 

(dette krever fortsatt de jquery.d.ts, hvis TSD er installert - tsd install jquery)

å installere TSD: npm install tsd -g

FOR Loggfila 0.9+

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

//Do your stuff

Og også, hvis jquery.d.ts ikke definerer en ekstern modul, legg følgende til jquery.d.ts:

declare module "jquery" {
    export = $;
}
Svarte 01/09/2013 kl. 20:04
kilden bruker

stemmer
8

Jeg tror mye av forvirringen rundt dette er på grunn av jQuery egentlig ikke opptre som en ekstern modul, som hemmer bruk av en importuttalelse. Løsningen er ganske ren, enkel og elegant nok til å ikke føle seg som en work-around.

Jeg har skrevet opp et enkelt eksempel på hjelp RequireJS og jQuery i Loggfila , som fungerer som følger ...

Du ta tak i typedefinisjoner fra Definitivt Type for RequireJS og jQuery.

Du kan nå bruke rå RequireJS med statisk typing innsiden av loggfila.

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.');
    });
});

Og da trenger du bare å legge den eneste skriptmerket til siden din:

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

Fordeler fremfor andre løsninger?

  1. Du kan oppdatere jQuery og RequireJS uavhengig
  2. Du trenger ikke å stole på mellomlegg prosjektet blir oppdatert
  3. Du trenger ikke å laste jQuery manuelt (eller noe annet som ikke er "som en modul" som du har en .d.tsfil for)
Svarte 26/01/2013 kl. 13:44
kilden bruker

stemmer
6
  1. Ta de grunnleggende jquery.d.ts fra TS kilden ( TypeScriptFile )
  2. Flytt () erklæringer fra JQueryStatic inn i en modul som dette:
  3. i kodemodulen importerer jQuery:

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. Kompilere modulen som AMD (TSC --module amd my_code.ts)
  2. Bruk requirejs å komponere din app på klientsiden med følgende config delen:

requirejs.config({
   paths: {
      'jquery': 'js/jquery-1.8.2.min'
   }
});
Svarte 09/10/2012 kl. 14:59
kilden bruker

stemmer
1

Først får den ( krever-jquery ) fra den offisielle github repo. Etter denne katalogen vil se ut:

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

Foreløpig er den enkleste måten å jobbe med jQuery og AMD moduler på Loggfila er å skrive følgende på main.ts:

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

Og kaller det fra 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>

Håper dette hjelper!

Svarte 06/10/2012 kl. 21:40
kilden bruker

stemmer
0

Du refererer til eksterne moduler av banen og filnavnet (minus JS forlengelse), eller bare etter filnavn hvis de er globale. I ditt tilfelle, bør du gjøre dette inne i module.ts:

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

Husk å kompilere med --module AMDsiden som standard får du kode som bruker commonjs requirefunksjon.

Svarte 01/11/2012 kl. 00:37
kilden bruker

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