jQuery von einem CDN beziehen?

Lesezeit: 5 Minuten

Benutzer-Avatar
Wilsonpage

Ich verwende require JS und möchte die beste Methode zur Verwendung einer CDN-Version von jQuery kennen. Ich höre, die 1.7-Version ist “AMD”, was helfen soll, kann aber kein direktes Beispiel finden. Ich hoffe, einige RequireJS-Gurus können mir helfen.

Benutzer-Avatar
jrburke

jQuery 1.7 registriert sich selbst als AMD-Modul mit dem Namen „jquery“, daher müssen Sie mithilfe der Pfadkonfiguration eine Zuordnung für „jquery“ erstellen:

requirejs.config({
  paths: {
    'jquery' : 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min'
  }
});

require(['jquery'], function($) {
  //$ points to jQuery
});

Beachten Sie jedoch, dass RequireJS Module asynchron lädt und außer Betriebwenn Sie also jQuery-Plugins verwenden möchten, die nicht eingeschlossen sind define(['jquery'], function ($){ /* plugin code goes here */ }); aufrufen, könnte das Plugin ausgeführt werden, bevor jQuery geladen wird.

Siehe die require-jquery project’s README über Möglichkeiten zum Umgang mit Dateien, die von jQuery abhängen, sich aber nicht selbst einschließen define() Anrufe.

  • Ich beginne jetzt dieses Modul malarky zu verstehen. Könnten Sie bitte erklären, warum der Unterstrich in diesem Beispiel nicht geladen wird: jsfiddle.net/WilsonPage/sCFwE/7? Ich kann in der Quelle sehen, dass es in Zeile 61 einen ‚define‘-Aufruf mit dem Namen ‚underscore‘ hat. github.com/documentcloud/underscore/blob/master/underscore.js

    – Wilsonpage

    11. November 2011 um 9:28 Uhr


  • Wie kann ich leicht sehen, welche Module definiert wurden? z.B. console.log(definedModules);

    – Wilsonpage

    11. November 2011 um 9:45 Uhr


  • @pagewil Ich habe die “.js” aus der Pfadzuordnung des Unterstrichs entfernt. Module verwenden normalerweise keine Dateierweiterungen. Das scheint der Übeltäter gewesen zu sein: jsfiddle.net/unscriptable/sCFwE/44

    – nicht schreibbar

    11. November 2011 um 15:53 ​​Uhr

  • In Bezug darauf, zu sehen, welches Modul definiert wurde: Alle AMD-Loader verwenden unterschiedliche Mechanismen, um ihre inneren Details offenzulegen, wie z. B. ihren Cache von Modulen. Ping @jrburke darauf an. 🙂

    – nicht schreibbar

    11. November 2011 um 15:56 Uhr

  • @unscriptable du verdammte Legende!

    – Wilsonpage

    11. November 2011 um 17:15 Uhr

Benutzer-Avatar
murrayju

Die Antwort von @jrburke funktioniert bei mir nicht. Laut dem RequireJS api doc, sollten Sie die Dateierweiterung nicht in den Pfad aufnehmen. Also hier ist der funktionierende Code:

requirejs.config({
    paths: {
        'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
    }
});

require(['jquery'], function($) {
    //$ points to jQuery
});

Ich habe ein funktionierendes Beispiel für jsfiddle:
http://jsfiddle.net/murrayju/FdKTn/

  • Korrigieren Sie mich, wenn ich falsch liege, aber ich denke, @jrburke ist der Autor von require.js, also stehen die Chancen gut, dass er es richtig gemacht hat.

    – Zach Lysobey

    1. April 2013 um 20:40 Uhr

  • Ich musste auch “.js” aus der Pfadkonfigurationszuordnung im oben angegebenen Beispiel entfernen, damit es funktioniert.

    – Marc Liyanage

    28. Mai 2013 um 4:41 Uhr

  • @ZachL, hast du dir meine jsfiddle angesehen? Fügen Sie einfach die hinzu .js, und Sie werden sehen, dass es nicht funktioniert. Dies könnte sich in einigen Versionen von requirejs geändert haben, da die Dokumentation uneinheitlich darüber ist, wann die entfernt werden soll .js.

    – murrayju

    5. September 2013 um 17:48 Uhr

  • @murrayju ja. Du hast es richtig. Er hat sich die Änderungen an @ jrburkes Beitrag angesehen, aber jemand hat (fälschlicherweise) den Beitrag bearbeitet .js hinein. Bearbeiten Sie es jetzt wieder heraus …

    – Zach Lysobey

    5. September 2013 um 20:30 Uhr

Benutzer-Avatar
Tim Dunham

Sie können es als Abhängigkeit für ein Modul einschließen, aber es ist ein wenig flockig. z.B

define([
"order!http://code.jquery.com/jquery-1.7.min.js"
], function($) {
})

Es ist aus 2 Gründen nicht so gut

1) Die jquery-Datei selbst ist kein Modul, also die $ Sie erhalten von der Funktion nicht jquery

2) die order! Plugin funktioniert nicht gut mit CDN-Versionen von Skripten. Siehe Requirejs-Reihenfolge funktioniert nicht mit Prioritätskonfiguration und CDN-Abhängigkeiten

Ich hatte noch keine Gelegenheit, dies in einem “echten” Projekt zu verwenden, weil wir noch kein Upgrade durchgeführt haben, aber aus meinen Tests habe ich herausgefunden, dass der beste Weg darin besteht, jquery in ein Skript-Tag einzufügen, dann funktioniert es großartig als Abhängigkeit zu Ihren Modulen. Hoffentlich ist das folgende kleine Beispiel hilfreich:

<html>
<head>
    <title>Index2</title>
    <script src="https://stackoverflow.com/questions/8070959/scripts/libraries/jquery.js" type="text/javascript"></script>
    <script src="../../scripts/libraries/require.js" type="text/javascript"></script>
    <script type="text/javascript"">

        require(
            {baseUrl: 'scripts'}, 
            ['jquery'], 
            function (dollarSign) {
                console.log(dollarSign('div').html('hi'));
            });       
    </script>

</head>
<body>
    <div>

    </div>
</body>
</html>

  • Danke. Unter Ihrer baseUrl-Zeile haben Sie [‘jquery’] Woher wissen Sie, dass sich das auf das oben eingefügte Skript bezieht? Wenn es sich auf das Fensterobjekt „jQuery“ bezieht, sollte es nicht als „jQuery“ und nicht als „jquery“ geschrieben werden?

    – Wilsonpage

    10. November 2011 um 16:09 Uhr


  • @timeDunham Ich habe dein Beispiel hier als Fiddle nachgebildet und es funktioniert jsfiddle.net/WilsonPage/BLaLq/1 verstehe immer noch nicht, woher require das jQuery-Objekt bekommt?!

    – Wilsonpage

    10. November 2011 um 16:13 Uhr


  • Wie würde es für Unterstriche wie in diesem Beispiel funktionieren: jsfiddle.net/WilsonPage/BLaLq/2

    – Wilsonpage

    10. November 2011 um 16:27 Uhr

  • Q1) @pagewil Es erhält das jQuery-Objekt, weil jquery sich selbst als AMD-Modul registriert (Zeile 970 von jquery 1.7 nicht verkleinerte Version).

    – timDunham

    10. November 2011 um 18:40 Uhr

  • Hey Leute – tut mir leid, MIA ging eine Weile. @pagewil über die Geige mit ‘jqueryyyy’ … der Grund, warum es nicht funktioniert, ist, dass sich die jquery speziell bei ‘jquery’ registriert (der Definitionsaufruf). Wenn Sie also jqueryyy anfordern, geht es und lädt die Datei und wenn es fertig ist Es erwartet, dass ein Modul mit dem Namen „jqueryyy“ geladen ist, findet es aber nicht.

    – timDunham

    11. November 2011 um 5:17 Uhr

Zunächst einmal wird die Verwendung empfohlen Protokollrelative URL für jQuery-CDN. Und zweitens verwenden Sie ein Array im Wert mit CDN und lokalen Orten, um die lokale Datei zu laden, wenn CND tot ist. Sie können beliebig viele CDN-URLs verwenden. Keine Angst, es möchte keine zweite Datei vom lokalen Ort laden, wenn es erfolgreich vom CDN heruntergeladen wurde.

requirejs.config({
  paths: {
    'jquery': ['//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', 'lib/jquery-1.10.2.min']
  }
});

1226130cookie-checkjQuery von einem CDN beziehen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy