2012-07-03 7 views
12

In meinem Symfony2-Projekt habe ich eine Reihe von Javascript-Abhängigkeiten und es wäre nett, sie zusammen mit PHP-Abhängigkeiten verwalten zu lassen. Im Moment habe ich sie in die deps Datei bin Hinzufügen zusammen mit PHP-Abhängigkeiten und ein symbolischer Link auf das Web-Verzeichnis erstellen, zum Beispiel:Wie installiere/aktualisiere ich Javascript-Anbieter im symfony2-Projekt?

//deps 
[knockout-js] 
    git=git://github.com/SteveSanderson/knockout.git 

Das Problem ist, dass JavaScript-Bibliotheken (die meisten von ihnen) müssen von mehreren zu erstellenden Dateien in eins. Nach der Installation/Aktualisierung der Anbieter muss ich also Kompilierungsskripte manuell ausführen. Soweit ich weiß, unterstützt das Skript bin/vendors keine Pre-/Post-Update-Hooks, die dieses Problem lösen würden.

Wie auch immer, wie nähern Sie sich der Aktualisierung von JavaScript-Anbietern in Ihren Projekten?

Antwort

8

Es kann ausgefallenere Wege sein ... aber ich nutze einfach die Pfade in meiner Basisvorlage wie so:

{% javascripts 
    filter='yui_js' 

    '../vendor/twitter/bootstrap/js/bootstrap-tab.js' 
    '../vendor/harvesthq/chosen/coffee/lib/select-parser.coffee' 
    '../vendor/harvesthq/chosen/coffee/lib/abstract-chosen.coffee' 
    '../vendor/harvesthq/chosen/coffee/chosen.jquery.coffee' 

    '@SOTBCoreBundle/Resources/public/js/script.js' 
%} 
    <script src="{{ asset_url }}"></script> 
{% endjavascripts %} 
+0

Das hängt nicht mit meiner Frage zusammen – Dziamid

+1

wie so? Sie haben gefragt, wie Sie Lieferanten-JavaScript in Ihr Projekt aufnehmen können. So mache ich es ... assetic kümmert sich um die Zusammenstellung von Kaffee und weniger Dateien. – MDrollette

+1

Die Frage bezieht sich auf das Installieren/Aktualisieren von JavaScript-Anbieterbibliotheken. – Dziamid

5

Composer verwendet werden können Javascript Abhängigkeiten als auch zu verwalten. Standardmäßig verwendet Composer nur ein Repository namens Packagist, das nur ein Repository für PHP-Bibliotheken ist. Wie Sie jedoch vorgeschlagen haben, können Sie eigene Repositories für JavaScript (oder andere) Bibliotheken hinzufügen, wie es in den Artikeln here vorgeschlagen wurde.

Hier ist meine composer.json, die einen benutzerdefinierten Knockout-js Repository fügt hinzu:

{ 
    "require": { 
     "php": ">=5.3.2", 
     "symfony/symfony": ">=2.0.10,<2.1.0-dev", 
     "doctrine/orm": ">=2.1.0,<2.2.0-dev", 
     "twig/extensions": "*", 

     "symfony/assetic-bundle": "2.0.*", 
     "sensio/generator-bundle": "2.0.*", 
     "sensio/framework-extra-bundle": "2.0.*", 
     "sensio/distribution-bundle": "2.0.*", 
     "jms/security-extra-bundle": "1.0.*", 
     "knockout/knockout-js": "2.1.0" 
    }, 

    "autoload": { 
     "psr-0": { 
      "Acme": "src/" 
     } 
    }, 

    "repositories": [ 
     { 
      "type": "package", 
      "package": { 
       "name": "knockout/knockout-js", 
       "version": "2.1.0", 
       "source": { 
        "type": "git", 
        "url": "https://github.com/SteveSanderson/knockout.git", 
        "reference": "v2.1.0" 
       } 
      } 
     }, 
     { 
      "type": "package", 
      "package": { 
       "name": "knockout/knockout-js", 
       "version": "2.0.0", 
       "source": { 
        "type": "git", 
        "url": "https://github.com/SteveSanderson/knockout.git", 
        "reference": "v2.0.0" 
       } 
      } 
     } 
    ] 

} 

Repository besteht aus Paketen (die Kombination von Quelle und Version der Bibliothek ist). Hier habe ich 2 Pakete (2.1.0, 2.0.0), die bereits eine vorgefertigte Quelle von knockout.js enthalten, so dass Sie nichts kompilieren müssen.

Jetzt möchten Sie vielleicht den neuesten Code kompilieren und verwenden. Um diese Routine zu automatisieren, dachte ich mir, kann man den Post-Checkout-Haken verwenden. ein neues Paket hinzufügen, die auf den neuesten Code verweist:

{ 
     "type": "package", 
     "package": { 
      "name": "knockout/knockout-js", 
      "version": "master", 
      "source": { 
       "type": "git", 
       "url": "https://github.com/SteveSanderson/knockout.git", 
       "reference": "master" 
      } 
     } 
    } 

Referenz dieses Paket in Abschnitt erfordern:

"knockout/knockout-js": "master" 

und einen Post-Kasse Haken mit Build-Anweisungen. Für knockout.js es ist einfach:

// vendor/knockout/knockout-js/.git/hooks/post-checkout 

#!/bin/sh 

echo "Building knockout.js"; 
`cd build && ./build-linux`; 
2

Wenn aus irgendeinem Grund Sie nicht möchten, assetic bündeln nicht nutzen Sie Ihre deps (Komponist) Setup kann Javascript Anbieter in einige Ordner unter web Verzeichnis zu laden.

This post beschreibt, wie es mit deps Datei zu tun. Und this post - wie man es über Komponist macht.

Verwandte Themen