2013-10-07 9 views
23

Versuchen zu verstehen, wo es richtig ist, "Karte" mit einem Platzhalter vs "Pfade" zu verwenden.Requirejs: Pfade vs Karte

Mit Blick auf die Quelle (aber sicherlich nicht 100% fließend) scheint es, dass es funktional keinen Unterschied zwischen diesen beiden Schnipsel geben würde. Ist das wahr?

Mit Paths:

require.config({ 
    baseUrl: "include/js/", 
    paths: { 
    foo: "stuff/foo", 
    } 
    }); 

Mit Karte:

require.config({ 
    baseUrl: "include/js/", 
    map: { 
    '*': {foo: "stuff/foo"}, 
    } 
    }); 

Antwort

7

Von den RequireJS-Dokumenten "Zusätzlich ist die Pfadkonfiguration nur für das Einrichten von Stammpfaden für Modul-IDs, nicht für das Zuordnen einer Modul-ID zu einer anderen."

Dies bedeutet "Pfade" bedeutet nur den Pfad zu Ihrer Ressource zuordnen, wenn es nicht in der Standardposition (BaseUrl) ist. Ich schätze, das hast du versucht.

Auf der anderen Seite können Sie mit "map" mehrere Versionen Ihrer Ressource (foo1, foo2 ...) haben, die Sie aus verschiedenen Pfaden laden können (dh Sie wollen foo1 von einem Desktop-Browser laden) und foo2, das eine Modifikation des ersten von einem mobilen Browser ist).

Also, wenn Sie verschiedene Versionen von Foo haben, würde ich "Pfad" verwenden, obwohl Sie Recht haben und "Karte" würde auch in diesem Fall funktionieren.

+0

es ist "Pfade" nicht "Pfad" :) aber gute Antwort! – OZZIE

8

Ich habe einen Unterschied gefunden, und das ist im Fall von requirejs loader Plugins Beispiel Beispiel: define(['cs!module'], function(){...}) für Coffeescript.

Mit dem map:* Teil der Konfiguration für die Deklaration der Plugins (und paths für abhängige Module) im Browser gearbeitet. In Node konnten Requirejs die Lade-Plugins jedoch nicht finden, wenn sie nicht unter paths waren.

Am Ende, um in der Lage zu sein, die gleiche Konfiguration in Node und dem Browser zu laufen, wurde ich los map:* Abschnitt, und erklärte alles in paths und es funktioniert gut für mich jetzt, auch wenn ich Ich hoffe immer noch, dass ich Klarheit darüber bekomme, warum.

4

Es gibt auch einen anderen wichtigen Unterschied mit der Map-Konfiguration. Sie definieren ein Präfix, das in Zuordnungen verwendet wird.

Für Ihr Beispiel würde dies bedeuten, dass foo wird stuff/foo abgebildet werden, sondern wird auch foo/bar/baz/bam zu stuff/foo/bar/baz/bam abgebildet.

Verwandte Themen