Hoe kan ik jQuery vereisen via AMD met de schrijfmachine

stemmen
16

Hoe kan ik eisen dat de jQuery AMD module voor mijn typoscript module. Bijvoorbeeld laten we zeggen mapstructuur voor scripts ziet er als volgt uit:


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

Ik wil dat het bestand gegenereerd js van module.ts te eisen jQuery-1.8.2.js via require.js worden geladen.

Momenteel heb ik:


    import jquery = module ( 'jquery') 

Dit resulteert in De naam jQuery bestaat niet in de huidige scope.

De vraag is gesteld op 06/10/2012 om 21:40
bron van user
In andere talen...                            


5 antwoorden

stemmen
26

VOOR DE SCHRIJFMACHINE 1.7+

Het lijkt erop dat standaard weer is aan het veranderen, waarbij de onderstaande 0.9+ methode werkt nog steeds, maar met ES6 komen de volgende module geladen kunnen worden gebruikt. (referentie: https://github.com/TypeStrong/atom-typescript/issues/237#issuecomment-90372105 )

import * as $ from "jquery";

en zelfs gedeeltelijk degenen

import {extend} from "jquery"; 

(deze moeten nog de jquery.d.ts, als TSD is geïnstalleerd - tsd install jquery)

naar tsd installeren: npm install tsd -g

VOOR DE SCHRIJFMACHINE 0.9+

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

//Do your stuff

En ook, als uw jquery.d.ts niet beschikt over een externe module te definiëren, voegt u de volgende jquery.d.ts:

declare module "jquery" {
    export = $;
}
antwoordde op 01/09/2013 om 21:04
bron van user

stemmen
8

Ik denk dat veel van de verwarring rond dit is te wijten aan jQuery niet echt gedragen als een externe module, die het gebruik van een remt importverklaring. De oplossing is heel schoon, eenvoudig en elegant genoeg om niet te voelen als een work-around.

Ik heb geschreven een eenvoudig voorbeeld van het gebruik van RequireJS en jQuery in typoscript , die werkt als volgt ...

Je pakt het type definities uit Zeker Getypt voor RequireJS en jQuery.

U kunt nu ruwe RequireJS met statische typen binnenkant van het logbestand.

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

En dan hoeft u alleen de enkele script tag toe te voegen aan uw pagina:

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

Voordelen ten opzichte van andere oplossingen?

  1. U kunt jQuery en RequireJS onafhankelijk te werken
  2. Je hoeft niet te vertrouwen op shim project wordt bijgewerkt
  3. Je hoeft niet handmatig jQuery laden (of iets anders dat is niet "als een module" dat je een hebt .d.tsbestand)
antwoordde op 26/01/2013 om 14:44
bron van user

stemmen
6
  1. Neem de basis jquery.d.ts van de TS bron ( TypeScriptFile )
  2. Verplaats de () verklaringen van de JQueryStatic in een module als volgt uit:
  3. in de code module importeert u de 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. Stel uw module als AMD (TSC --module amd my_code.ts)
  2. Gebruik requirejs om uw app te componeren op de client met de volgende config sectie:

requirejs.config({
   paths: {
      'jquery': 'js/jquery-1.8.2.min'
   }
});
antwoordde op 09/10/2012 om 15:59
bron van user

stemmen
1

Eerst krijgen de ( vereisen-jQuery ) van de officiële github repo. Na dit uw directory eruit zal zien:

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

Momenteel is de makkelijkste manier om te werken met jQuery en AMD modules op Typescript is om het volgende op de main.ts schrijven:

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

En noem het uit je 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>

Ik hoop dat dit helpt!

antwoordde op 06/10/2012 om 22:40
bron van user

stemmen
0

U verwijst externe modules door pad en de bestandsnaam (minus de extensie .js), of gewoon door de bestandsnaam als ze wereldwijd. In uw geval, moet u dit doen binnen van module.ts:

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

Vergeet niet om compileren met --module AMDsinds standaard je code die de commonjs gebruikt te krijgen requirefunctie.

antwoordde op 01/11/2012 om 01:37
bron van user

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