Aunque existen excelentes soluciones para administrar las dependencias en el lado del servidor, no pude encontrar ninguna que satisfaga todas mis necesidades de tener un flujo de trabajo coherente de administración de dependencias de JavaScript en el lado del cliente. Quiero satisfacer estos 5 requisitos:
- Administrar mis dependencias del lado del cliente en un formato similar al de la NGP package.json o Bower s'
bower.json - Debería tener la flexibilidad de apuntar a git repo o archivos js reales (ya sea en la web o localmente) en mi
dependency.jsonarchivo para bibliotecas menos conocidas (npm le permite apuntar a git repos) - Debería minificar y asignar un espacio de nombres a todas las bibliotecas en un solo archivo como ender ; ese es el único archivo js que necesitaría poner en mi
<script>etiqueta en el lado del cliente - Debería tener soporte listo para usar para CoffeeScript como BoxJS 4 (ahora muerto)
En el navegador, debería poder usar el estilo require :
var $ = require('jquery'); var _ = require('underscore');O mejor aún, haz el estilo headjs :
head.js(['jquery', 'underscore', 'mylib'], function($, _, mylib) { // executed when all libraries are loaded });
Si no existe tal herramienta única, ¿cuál es la mejor combinación de herramientas, es decir, una cadena de herramientas que puedo combinar usando algo como volo (o gruñido )?
Ya he investigado todas las herramientas a las que me he vinculado aquí y satisfacen solo hasta 3 de mis requisitos, en el mejor de los casos, individualmente. Por lo tanto, no vuelva a publicar sobre estas herramientas. Solo aceptaría una respuesta que proporcione una única herramienta que satisfaga mis 5 requisitos o si alguien publica un flujo de trabajo / script / ejemplo de trabajo concreto de una cadena de herramientas de múltiples herramientas de este tipo que también satisfaga todos mis requisitos. Gracias.
fuente

requiresintaxis del nodo al navegador, considere browserifyRespuestas:
require.js hace todo lo que necesitas.
Mi respuesta a esta pregunta puede ayudarte
Ejemplo:
Jerarquía del proyecto de la aplicación cliente:
main.js es donde inicializa su aplicación cliente y configura require.js:
Las dependencias usarán el complemento cs cuando estén precedidas por "cs!". El complemento cs compila el archivo coffeescript.
Cuando vas en prod, puede pre-compilar todo el proyecto con r.js .
Estos son sus requisitos:
Administre las dependencias del lado del cliente en un formato similar al package.json de npm o al component.json de bower. ¡Diferente pero TAN BUENO!
Debería tener la flexibilidad de apuntar a git repo o archivos js reales (ya sea en la web o localmente) en mi archivo dependency.json para bibliotecas menos conocidas (npm le permite apuntar a git repos). SI
Debería minificar y asignar un espacio de nombres a todas las bibliotecas en un solo archivo como ender; ese es el único archivo js que necesitaría poner en mi etiqueta de script en el lado del cliente. SÍ con r.js.
Debería tener soporte listo para usar para coffeescript como Box. SI
En el navegador puedo usar require style o headjs. SI
fuente
r.js, ¿puedo simplemente extraer versiones no minificadas de todas las bibliotecas, o cómo debo decidir entre bibliotecas minificadas y no minificadas?http://requirejs.org/ es el que estás buscando, creo
fuente
Como @ Guillaume86, creo que el dobladillo te acercará más a donde quieres estar.
En hem, las dependencias se gestionan mediante una combinación de npm y hem. Utilice npm para instalar explícitamente todas las dependencias externas de sus proyectos. Use hem para especificar qué dependencias (tanto externas como locales) se deben unir para las operaciones del lado del cliente.
Creé un proyecto esqueleto de esto para que pueda ver cómo funcionaría esto; puede verlo en https://github.com/dsummersl/clientsidehem
Agregar dependencias
Use npm para buscar una dependencia específica y luego modifique el archivo package.json para asegurarse de que se realice un seguimiento de la dependencia en el futuro. Luego, especifique la dependencia para su aplicación en slug.json.
Por ejemplo, suponga que desea agregar la dependencia de script de café. Simplemente use npm para instalar la dependencia y guárdelo en su archivo package.json:
Suponga que desea incluir su propio módulo 'bloomfilters' y no está en el registro de npm. Puede agregarlo a su proyecto de la siguiente manera:
Módulos locales
Si desea incluir su propio café o javascript, puede hacerlo agregando esos archivos a la aplicación / carpeta. Tenga en cuenta que para exponer su script a través del método 'require' debe convertirlo en un módulo CommonJS. Es muy simple: consulte los documentos del dobladillo .
Archivos locales
Si desea incluir un código que no sea CommonJS y que no sea 'obligatorio', también puede unirlo haciendo referencia a su JavaScript personalizado o coffeescript a través de la lista 'libs' en slug.json.
CSS
Hem unirá su CSS también, si lo desea. Consulte los documentos de dobladillo .
edificio
Una vez que tenga sus dependencias en la lista, puede usar el dobladillo para unirlas todas.
Notas
Hem estaba destinado al proyecto spinejs , pero no es necesario que lo uses para eso. Ignore cualquier documento que mencione la columna vertebral como desee ...
fuente
Bueno, me sorprende que nadie haya mencionado todavía Browserify .
fuente
napao no? npmjs.org/package/napaEstoy bastante seguro de que Hem cumple con sus requisitos (yo uso una bifurcación personal con compiladores adicionales, jade y lápiz, es fácil de personalizar según sus necesidades). Utiliza npm para gestionar las dependencias.
fuente
Es posible que desee echar un vistazo a Yeoman , que utiliza varias técnicas para ayudarlo con sus requisitos.
Soporte integrado para CoffeeScript, Compass y más. Funciona con r.js ( RequireJS ), unittesting, etc.
En cuanto a sus requisitos:
Todas las características:
fuente
Bower puede adaptarse a sus necesidades (1) y (2) para el resto que necesite. Desde el archivo Léame:
Para instalar un paquete:
fuente
Mira el administrador de paquetes Jam . A continuación se muestra la descripción de su página de inicio.
Parece muy similar a npm en cómo funciona.
Instale el paquete como a continuación
mantener los paquetes actualizados ejecutando
Optimice los paquetes para la producción
Las dependencias de jam se pueden agregar en el
package.jsonarchivo.Para obtener la documentación completa, lea la documentación de Jam
fuente
Me encontré con inject.js
Algunas de las características, desde el sitio del proyecto :
fuente
Hay un par de opciones:
El componente también puede ser de interés, no administra las dependencias per se, pero le permite usar versiones cortadas de bibliotecas grandes.
fuente
Utilizo hem con npm y quería agregar algunos beneficios adicionales que creo que no estaban cubiertos hasta ahora.
hem buildmenos que esté publicando una aplicación.cakemétodo anterior, simplemente puede vincular directamente a coffeescript desde proyectos dependientes.eco(Coffeescript incrustado) para vistas y Stylus para CSS, y compila todo eso, junto con su Coffeescript, en un archivo JS y un archivo CSS.Aquí hay una lista básica para configurar una aplicación Spine, hem, coffeescript. Siéntase libre de ignorar las partes de la columna vertebral. De hecho, a veces utilizo
spine apppara configurar una estructura de directorio para una aplicación que no es de Spine, luego editoslug.jsonpara cambiar a una estructura de compilación diferente.curl http://npmjs.org/install.sh | shen un sistema * nix. Asumiré que está disponible desde la línea de comandos.npm install -g hem). El desarrollo se ha ramificado últimamente, por lo que es posible que desee obtenerlo directamente de github ( https://github.com/spine/hem ), verificar una rama ynpm install -g .en esa carpeta.npm install -g spine.apphará que spine esté disponible como un comando globalspine app folderhará que la columna vertebral de un proyecto llamadoappenfolder, la generación de la estructura de directorios de la derecha y un montón de archivos de esqueleto para empezar.cda la carpeta y editedependencies.jsonlas bibliotecas que necesite. Agréguelos paraslug.jsonque Hem sepa dónde encontrarlos también.npm linkcualquiera de sus paquetes locales en desarrollo paranode_modules, y puede agregarlos aslug.jsonpara hem (ya seaindex.jspara incluirlo directamente oindex.coffeesi desea que hem lo compile).npm install .para descargar todas las dependencias que acaba de ingresar.Si echa un vistazo a la configuración predeterminada de la columna vertebral, hay un lugar
app/lib/setup.coffeedonde se encuentranrequiretodas las bibliotecas que necesita de sus dependencias. Ejemplos:En
index.coffee, solo tiene querequire lib/setupcargar el controlador principal de su aplicación. Además, necesitarequirecualquier otra clase en esos otros controladores. Puede utilizarspine controller somethingospine model somethingpara generar plantillas para controladores y modelos. El controlador Spine típico tiene el siguiente aspecto, utilizando nodosrequire:El generado predeterminado
index.htmlgeneralmente estará bien para cargar su aplicación, pero modifíquelo según sea necesario. Según sus requisitos, solo extraejsuncssarchivo y uno , que nunca necesita modificar.csscarpeta. Es mucho más flexible que CSS :)folder, ejecutehem serverpara iniciar un servidor de hem y navegue hastalocalhost:9294para ver su aplicación. (Si instaló hem globalmente). Tiene algunos argumentos ocultos, por ejemplo,--host 0.0.0.0escucha en todos los puertos.Una cosa más: normalmente,
hem serverse actualizará automáticamente a medida que actualiza su código y guarda archivos, lo que hace que sea muy fácil de depurar. La ejecuciónhem buildcompilará su aplicación en dos archivosapplication.js, que está minificado yapplication.css. Si ejecutahem serverdespués de esto, usará esos archivos y ya no se actualizará automáticamente. Así que no lo hagashem buildhasta que realmente necesites una versión reducida de tu aplicación para la implementación.Referencias adicionales: introducción a Spine.js y hem
fuente
Aquí hay una solución que adopta un enfoque muy diferente: empaque todos los módulos en un objeto JSON y requiera módulos leyendo y ejecutando el contenido del archivo sin solicitudes adicionales.
Implementación de demostración pura del lado del cliente: http://strd6.github.io/editor/
https://github.com/STRd6/require/blob/master/main.coffee.md
STRd6 / require depende de tener un paquete JSON disponible en tiempo de ejecución. La
requirefunción se genera para ese paquete. El paquete contiene todos los archivos que su aplicación podría requerir. No se realizan más solicitudes http porque el paquete agrupa todas las dependencias. Esto es lo más cerca que se puede llegar al estilo Node.js que requiere el cliente.La estructura del paquete es la siguiente:
A diferencia de Node, un paquete no conoce su nombre externo. Depende del pacakge, incluida la dependencia, nombrarlo. Esto proporciona una encapsulación completa.
Dada toda esa configuración, aquí hay una función que carga un archivo desde dentro de un paquete:
Este contexto externo proporciona alguna variable a la que tienen acceso los módulos.
Una
requirefunción se expone a los módulos, por lo que pueden requerir otros módulos.También se exponen propiedades adicionales, como una referencia al objeto global y algunos metadatos.
Finalmente ejecutamos el programa dentro del módulo y contexto dado.
Esta respuesta será más útil para aquellos que deseen tener un estilo sincrónico de node.js require una declaración en el navegador y no estén interesados en soluciones de carga de scripts remotos.
fuente
Consulte cartero si usa node / express en el backend.
fuente
Le sugiero que consulte el kit de herramientas del dojo que parece cumplir con la mayoría de sus requisitos. El que no estoy seguro es CoffeeScript.
dojo trabaja con módulos escritos en el formato de definición de módulo asincrónico (AMD). Tiene un sistema de compilación con paquetes y puedes agregarlos en uno o varios archivos (llamados capas). Aparentemente acepta repositorios de tipo git, más detalles sobre el sistema de compilación aquí:
http://dojotoolkit.org/documentation/tutorials/1.8/build/
Para el registro, se espera la versión beta v1.9 el próximo mes.
fuente
Otro marco que satisface todos mis criterios lanzado recientemente: http://duojs.org/ (y también admite el tratamiento de otros recursos como CSS como dependencias).
fuente
La inyección de dependencia con carga asincrónica + browserify será otra buena opción, en comparación con requirejs
gestión-de-dependencia-frontend-asincrónica-sin-AMD
fuente