2012-07-03 1249 views
12

En mi proyecto Symfony2 tengo varias dependencias de JavaScript y sería bueno tenerlas administradas junto con las dependencias de php. En este momento los estoy añadiendo al archivo deps junto con las dependencias de PHP, y crear un enlace simbólico al directorio web, por ejemplo:¿Cómo instalar/actualizar proveedores de JavaScript en el proyecto Symfony2?

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

El problema es que javascript bibliotecas (la mayoría de ellos) necesitan ser compilada a partir de varias archivos en uno. Entonces, después de instalar/actualizar proveedores, necesito ir y ejecutar scripts de compilación a mano. Hasta donde yo sé, la secuencia de comandos bin/vendors no admite ganchos de actualización previa/posterior, lo que resolvería este problema.

De todos modos, ¿cómo te acercas a la actualización de los proveedores de JavaScript en tus proyectos?

Respuesta

8

Puede haber formas más elegantes ... pero sólo tiene que utilizar los caminos en mi plantilla base de este modo:

{% 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

Esto no está relacionado con mi pregunta – Dziamid

+1

¿cómo es así? Usted preguntó cómo incluir el Javascript del vendedor en su proyecto. Así es como lo hago ... assetic maneja la compilación de café y menos archivos. – MDrollette

+1

La pregunta es acerca de instalar/actualizar las bibliotecas de proveedores de JavaScript. – Dziamid

5

Compositor puede utilizarse para gestionar Javascript dependencias. Por defecto, el compositor está utilizando solo un repositorio llamado Packagist, que es un repositorio solo para bibliotecas PHP. Sin embargo, como se sugiere here, puede agregar sus propios repositorios para javascript (o cualquier otra) bibliotecas.

Aquí es mi composer.json que añade un repositorio nocaut-js personalizado:

{ 
    "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" 
       } 
      } 
     } 
    ] 

} 

repositorio consiste en paquetes (que es una combinación de fuente y la versión de la biblioteca). Aquí tengo 2 paquetes (2.1.0, 2.0.0) que ya contienen una fuente preconstruida de knockout.js, por lo que no tiene que compilar nada.

Ahora, hay ocasiones en las que es posible que desee compilar y usar el último código. Para automatizar esta rutina, pensé, uno puede usar el gancho de git post-checkout. Añadir un nuevo paquete que se refiere al último código:

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

referencia en este paquete requerir sección:

"knockout/knockout-js": "master" 

y un gancho post-pago y envío con instrucciones de construcción. Para knockout.js es simple:

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

#!/bin/sh 

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

Si por alguna razón usted no desea utilizar Assetic paquete se puede configurar sus deps (compositor) para cargar javascript vendedores en alguna carpeta bajo web directorio.

This post describe cómo hacerlo usando el archivo deps. Y this post - cómo hacerlo a través de compositor.

Cuestiones relacionadas