Webpack junto con Symfony

El mejor resultado que he conseguido para conectar symfony con webpack ha sido usar Webpack-bundle. Este bundle, instalado sobre symfony, da una serie de utilidades y ventajas que me han permitido integrar fácilmente un stack de desarrollo javascript sobre Symfony.

Hay varias maneras de integrar webpack son Symfony, incluso existen otros bundles además del que he usado. Pero casi todos se basan en modificar el flujo de desarrollo de javascript para adaptarlo a la manera de hacer de Symfony. Webpack-bundle no es así. Me permite utilizar un fichero de configuración de webpack estándar, ne deja definir el entry-point js que quiera, e incluso puedo usar los módulos, loaders y plugins que necesite.

Todo esto lo podría hacer integrando manualmente webpack con Symfony. Es decir, desarrollar con javascript de forma aislada, compilar los ficheros js usando:

webpack app/index.js dist/bundle.js  

e insertar el fichero bundle.js manualmente dentro de twig:

<html>  
  <head>
  </head>
  <body>
    <script src="dist/bundle.js"></script>
  </body>
</html>  

El mismo autor de Webpack-bundle recomienda hacerlo así si se está desarrollando aplicación single-page y si la separación entre front y back está clara.

Pero cuando no es así y tenemos varios entry-points a la aplicación, Webpack-bundle se vuelve muy útil. Busca todos los puntos de entrada, gestiona sus dependencias, compila y enlaza desde twig los ficheros automáticamente. Lo único que hay que hacer es enlazar cada fichero entry-point desde twig:

<script src="{{ webpack_asset('@AppBundle/Resources/assets/script.js') }}"></script>  

Para compilar los ficheros optimizados para un entorno de producción, hay que ejecutar:

app/console maba:webpack:compile --env=prod  

El bundle facilita también desarrollar sin tener que estar compilando y recargando manualmente con cada cambio a través del comando:

app/console maba:webpack:dev-server  

De esta manera puedo desarrollar directamente en javascript y ver los cambios que haga en tiempo real, sin necesidad de compilar manualmente.

Como conclusión diría que, aunque el bundle no haga nada que no pueda hacer integrando manualmente webpack con Symfony, sí que lo hace más fácil y de manera más ordenada.