Estoy tratando de resumir mi conocimiento sobre los gestores de paquetes, paquetes y corredores de tareas de JavaScript más populares. Por favor corrígeme si estoy equivocado:
npm
&bower
son administradores de paquetes. Simplemente descargan las dependencias y no saben cómo construir proyectos por su cuenta. Lo que saben es llamar awebpack
/gulp
/grunt
después de buscar todas las dependencias.bower
es comonpm
, pero construye unos árboles de dependencia aplanados (a diferencia denpm
lo que lo hace recursivamente). El significadonpm
recupera las dependencias para cada dependencia (puede obtener las mismas varias veces), mientrasbower
espera que incluya manualmente las subdependencias. A veces,bower
ynpm
se usan juntos para el front-end y el back-end respectivamente (ya que cada megabyte podría importar en el front-end).grunt
ygulp
son corredores de tareas para automatizar todo lo que se puede automatizar (es decir, compilar CSS / Sass, optimizar imágenes, hacer un paquete y minificarlo / transpilarlo).grunt
vs.gulp
(es comomaven
vs.gradle
o configuración vs. código). Grunt se basa en la configuración de tareas independientes separadas, cada tarea abre / maneja / cierra el archivo. Gulp requiere menos cantidad de código y se basa en flujos de Nodo, lo que le permite construir cadenas de tuberías (sin volver a abrir el mismo archivo) y lo hace más rápido.webpack
(webpack-dev-server
) - para mí es un corredor de tareas con recarga de cambios en caliente que le permite olvidarse de todos los observadores JS / CSS.npm
Losbower
complementos / + pueden reemplazar a los corredores de tareas. Sus habilidades a menudo se cruzan, por lo que hay diferentes implicaciones si necesita usargulp
/grunt
overnpm
+ plugins. Pero los corredores de tareas son definitivamente mejores para tareas complejas (por ejemplo, "en cada paquete de creación de compilación, transpilar de ES6 a ES5, ejecutarlo en todos los emuladores de navegadores, hacer capturas de pantalla e implementar en Dropbox a través de ftp").browserify
permite empaquetar módulos de nodo para navegadores.browserify
vsnode
'srequire
es realmente AMD vs CommonJS .
Preguntas:
- ¿Qué es
webpack
ywebpack-dev-server
? La documentación oficial dice que es un paquete de módulos, pero para mí es solo un corredor de tareas. ¿Cual es la diferencia? - ¿Dónde lo usarías
browserify
? ¿No podemos hacer lo mismo con las importaciones de nodo / ES6? - ¿Cuándo usarías
gulp
/grunt
overnpm
+ plugins? - Proporcione ejemplos cuando necesite usar una combinación
Respuestas:
Webpack y Browserify
Webpack y Browserify hacen casi el mismo trabajo, que es procesar su código para usarlo en un entorno de destino (principalmente el navegador, aunque puede dirigirse a otros entornos como Node). El resultado de dicho procesamiento es uno o más paquetes : scripts ensamblados adecuados para el entorno objetivo.
Por ejemplo, supongamos que escribió el código ES6 dividido en módulos y desea poder ejecutarlo en un navegador. Si esos módulos son módulos Node, el navegador no los comprenderá, ya que existen solo en el entorno Node. Los módulos ES6 tampoco funcionarán en navegadores antiguos como IE11. Además, es posible que haya utilizado funciones de lenguaje experimental (próximas propuestas de ES) que los navegadores aún no implementan, por lo que ejecutar dicho script solo arrojaría errores. Herramientas como Webpack y Browserify resuelven estos problemas traduciendo dicho código a un formulario que un navegador pueda ejecutar . Además de eso, hacen posible aplicar una gran variedad de optimizaciones en esos paquetes.
Sin embargo, Webpack y Browserify difieren de muchas maneras, Webpack ofrece muchas herramientas por defecto (por ejemplo, división de código), mientras que Browserify puede hacer esto solo después de descargar complementos, pero el uso de ambos conduce a resultados muy similares . Se trata de preferencias personales (Webpack es más moderno). Por cierto, Webpack no es un corredor de tareas, es solo un procesador de sus archivos (los procesa mediante los llamados cargadores y complementos) y puede ser ejecutado (entre otras formas) por un corredor de tareas.
Servidor de desarrollo webpack
Webpack Dev Server ofrece una solución similar a Browsersync: un servidor de desarrollo donde puede implementar su aplicación rápidamente mientras trabaja en ella y verificar su progreso de desarrollo de inmediato, con el servidor de desarrollo que actualiza automáticamente el navegador en los cambios de código o incluso propaga el código modificado al navegador sin recargar con el llamado reemplazo de módulo activo.
Corredores de tareas vs scripts NPM
He estado usando Gulp por su concisión y tarea fácil de escribir, pero luego descubrí que no necesito ni a Gulp ni a Grunt. Todo lo que siempre he necesitado podría haberse hecho usando scripts NPM para ejecutar herramientas de terceros a través de su API. Elegir entre guiones Gulp, Grunt o NPM depende del gusto y la experiencia de su equipo.
Si bien las tareas en Gulp o Grunt son fáciles de leer incluso para personas que no están tan familiarizadas con JS, es una herramienta más para requerir y aprender, y personalmente prefiero reducir mis dependencias y simplificar las cosas. Por otro lado, reemplazar estas tareas con la combinación de secuencias de comandos NPM y secuencias de comandos (probablemente JS) que ejecutan esas herramientas de terceros (por ejemplo, configuración de secuencias de comandos de nodo y ejecución de rimraf para fines de limpieza) podría ser más difícil. Pero en la mayoría de los casos, esos tres son iguales en términos de sus resultados.
Ejemplos
En cuanto a los ejemplos, le sugiero que eche un vistazo a este proyecto de inicio React , que le muestra una buena combinación de secuencias de comandos NPM y JS que cubren todo el proceso de construcción e implementación. Puede encontrar esos scripts NPM
package.json
en la carpeta raíz, en una propiedad llamadascripts
. Allí encontrarás principalmente comandos comobabel-node tools/run start
. Babel-node es una herramienta CLI (no pensada para uso de producción), que al principio compila el archivo ES6tools/run
(archivo run.js ubicado en las herramientas ), básicamente una utilidad de corredor. Este corredor toma una función como argumento y la ejecuta, que en este caso esstart
otra utilidad (start.js
) responsable de agrupar los archivos de origen (tanto del cliente como del servidor) e iniciar la aplicación y el servidor de desarrollo (el servidor de desarrollo probablemente sea Webpack Dev Server o Browsersync).Hablando con mayor precisión,
start.js
crea paquetes del lado del cliente y del servidor, inicia un servidor express y después de un lanzamiento exitoso inicializa la sincronización del navegador, que en el momento de la escritura se veía así (consulte el proyecto de inicio de reacción para el código más nuevo).La parte importante es
proxy.target
, donde establecen la dirección del servidor que desean proxy, que podría ser http: // localhost: 3000 , y Browsersync inicia un servidor que escucha en http: // localhost: 3001 , donde los activos generados se sirven con cambio automático detección y reemplazo de módulos calientes. Como puede ver, hay otra propiedad de configuraciónfiles
con archivos o patrones individuales. La sincronización del navegador busca cambios y recarga el navegador si ocurre algo, pero como dice el comentario, Webpack se encarga de ver las fuentes js por sí solo con HMR, por lo que cooperan allí.Ahora no tengo ningún ejemplo equivalente de esa configuración Grunt o Gulp, pero con Gulp (y algo similar con Grunt) escribiría tareas individuales en gulpfile.js como
donde estaría haciendo prácticamente las mismas cosas que en el kit de inicio, esta vez con el corredor de tareas, que resuelve algunos problemas para usted, pero presenta sus propios problemas y algunas dificultades durante el aprendizaje del uso, y como digo, el Cuantas más dependencias tenga, más puede salir mal. Y esa es la razón por la que me gusta deshacerme de esas herramientas.
fuente
Actualización octubre 2018
Si aún no está seguro sobre el desarrollo de Front-end, puede echar un vistazo rápido a un excelente recurso aquí.
https://github.com/kamranahmedse/developer-roadmap
Actualización junio 2018
Aprender JavaScript moderno es difícil si no has estado allí desde el principio. Si eres el recién llegado, recuerda revisar este excelente escrito para tener una mejor visión general.
https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70
Actualización de julio de 2017
Recientemente encontré una guía realmente completa del equipo de Grab sobre cómo abordar el desarrollo front-end en 2017. Puede consultarlo a continuación.
https://github.com/grab/front-end-guide
También he estado buscando esto desde hace bastante tiempo, ya que hay muchas herramientas disponibles y cada una de ellas nos beneficia en un aspecto diferente. La comunidad está dividida en herramientas como
Browserify, Webpack, jspm, Grunt and Gulp
. También puede escuchar sobreYeoman or Slush
. Eso no es realmente un problema, es confuso para todos los que intentan entender un camino claro hacia adelante.De todos modos, me gustaría contribuir con algo.
1. Administrador de paquetes
Los administradores de paquetes simplifican la instalación y actualización de las dependencias del proyecto, que son bibliotecas como:,
jQuery, Bootstrap
etc., todo lo que se usa en su sitio y no está escrito por usted.Navegando por todos los sitios web de la biblioteca, descargando y desempacando los archivos, copiando archivos en los proyectos, todo esto se reemplaza con algunos comandos en el terminal.
NPM
significa: loNode JS package manager
ayuda a administrar todas las bibliotecas en las que se basa su software. Definiría sus necesidades en un archivo llamadopackage.json
y ejecutadonpm install
en la línea de comando ... luego BANG, sus paquetes están descargados y listos para usar. Podría usarse tanto parafront-end and back-end
bibliotecas.Bower
: para la gestión de paquetes front-end, el concepto es el mismo con NPM. Todas sus bibliotecas se almacenan en un archivo llamadobower.json
y luego se ejecutanbower install
en la línea de comando.NPM
Cenador
Yarn
: Un nuevo administrador de paquetesJavaScript
publicadoFacebook
recientemente por con algunas ventajas más en comparación conNPM
. Y con Yarn, aún puede usar ambosNPM
y elBower
registro para obtener el paquete. Si ha instalado un paquete anteriormente,yarn
crea una copia en caché que facilitaoffline package installs
.jspm
: es un administrador de paquetes para elSystemJS
cargador de módulos universal, construido sobre elES6
cargador de módulos dinámico . No es un administrador de paquetes completamente nuevo con su propio conjunto de reglas, sino que funciona sobre las fuentes de paquetes existentes. Fuera de la caja, funciona conGitHub
ynpm
. Como la mayoría de losBower
paquetes basados se basanGitHub
, también podemos instalar esos paquetesjspm
. Tiene un registro que enumera la mayoría de los paquetes front-end comúnmente utilizados para una instalación más fácil.2. Módulo cargador / agrupación
La mayoría de los proyectos de cualquier escala tendrán su código dividido entre varios archivos. Solo puede incluir cada archivo con una
<script>
etiqueta individual , sin embargo,<script>
establece una nueva conexión http, y para archivos pequeños, que es un objetivo de modularidad, el tiempo para configurar la conexión puede llevar mucho más tiempo que la transferencia de datos. Mientras se descargan los scripts, no se puede cambiar el contenido de la página.P.ej
P.ej
Las computadoras pueden hacerlo mejor que tú, y es por eso que debes usar una herramienta para agrupar automáticamente todo en un solo archivo.
Entonces oímos acerca de
RequireJS
,Browserify
,Webpack
ySystemJS
RequireJS
: es unJavaScript
cargador de archivos y módulos. Está optimizado para el uso en el navegador, pero se puede usar en otros entornos JavaScript, comoNode
.Por ejemplo: myModule.js
En
main.js
, podemos importarmyModule.js
como dependencia y usarlo.Y luego en nuestro
HTML
, podemos referirnos al uso conRequireJS
.Browserify
: establecido para permitir el uso deCommonJS
módulos formateados en el navegador. En consecuencia,Browserify
no es tanto un cargador de módulos como un paquete de módulos:Browserify
es una herramienta de tiempo de construcción que produce un paquete de código que luego puede cargarse en el lado del cliente.Comience con una máquina de compilación que tenga instalados node & npm y obtenga el paquete:
Escribe tus módulos en
CommonJS
formatoY cuando esté contento, emita el comando para agrupar:
Browserify encuentra recursivamente todas las dependencias del punto de entrada y las ensambla en un solo archivo:
Webpack
: Agrupa todos sus activos estáticos, incluidasJavaScript
imágenes, CSS y más, en un solo archivo. También le permite procesar los archivos a través de diferentes tipos de cargadores. Podrías escribir tuJavaScript
conCommonJS
oAMD
sintaxis de módulos. Ataca el problema de compilación de una manera fundamentalmente más integrada y obstinada. En elBrowserify
usoGulp/Grunt
y una larga lista de transformaciones y complementos para hacer el trabajo.Webpack
ofrece suficiente potencia fuera de la caja que normalmente no necesitaGrunt
o no necesitaGulp
.El uso básico es más que simple. Instale Webpack como Browserify:
Y pase el comando un punto de entrada y un archivo de salida:
SystemJS
: es un cargador de módulos que puede importar módulos en tiempo de ejecución en cualquiera de los formatos populares utilizados hoy en día (CommonJS, UMD, AMD, ES6
). Está construido en la parte superior delES6
cargador de módulos polyfill y es lo suficientemente inteligente como para detectar el formato que se utiliza y manejarlo adecuadamente.SystemJS
También puede transpilar el código ES6 (conBabel
oTraceur
) u otros idiomas, comoTypeScript
yCoffeeScript
utilizando complementos.3. Corredor de tareas
Los corredores de tareas y las herramientas de compilación son principalmente herramientas de línea de comandos. Por qué necesitamos usarlos: en una palabra: automatización . Cuanto menos trabajo tenga que hacer al realizar tareas repetitivas como minificación, compilación, pruebas unitarias, linting, que anteriormente nos costó muchas veces hacer con la línea de comandos o incluso manualmente.
Grunt
: Puede crear automatización para su entorno de desarrollo para preprocesar códigos o crear scripts de compilación con un archivo de configuración y parece muy difícil manejar una tarea compleja. Popular en los últimos años.Cada tarea
Grunt
es un conjunto de configuraciones de complementos diferentes, que simplemente se ejecutan una tras otra, de forma estrictamente independiente y secuencial.Gulp
: Automatización igual que,Grunt
pero en lugar de configuraciones, puede escribirJavaScript
con secuencias como si fuera una aplicación de nodo. Prefiero estos días.Esta es una
Gulp
declaración de tarea de muestra.4. Herramientas de andamios
Slush and Yeoman
: Puede crear proyectos iniciales con ellos. Por ejemplo, planea construir un prototipo con HTML y SCSS, luego, en lugar de crear manualmente una carpeta como scss, css, img, fonts. Simplemente puede instalaryeoman
y ejecutar un script simple. Entonces todo aquí para ti.Encuentra más aquí .
Mi respuesta no coincide con el contenido de la pregunta, pero cuando busco estos conocimientos en Google, siempre veo la pregunta en la parte superior, así que decidí responderla en resumen. Espero que les haya resultado útil.
fuente
OK, todos tienen algunas similitudes, hacen lo mismo por ti de maneras diferentes y similares, los divido en 3 grupos principales de la siguiente manera:
1) Paquetes de módulos
webpack y browserify como populares, funcionan como corredores de tareas, pero con más flexibilidad, también agruparán todo como su configuración, por lo que puede señalar el resultado como bundle.js, por ejemplo, en un solo archivo que incluye CSS y Javascript, para más detalles de cada uno, mira los detalles a continuación:
paquete web
mas aqui
browserify
mas aqui
2) corredores de tareas
gulp and gruñido son corredores de tareas, básicamente lo que hacen, creando tareas y ejecutándolas cuando lo desee, por ejemplo, instala un complemento para minimizar su CSS y luego lo ejecuta cada vez que lo hace, más detalles sobre cada uno:
trago
mas aqui
gruñido
mas aqui
3) Gerentes de paquete
administradores de paquetes, lo que hacen es administrar los complementos que necesita en su aplicación e instalarlos para usted a través de github, etc., usando package.json, muy útil para actualizar sus módulos, instalarlos y compartir su aplicación, más detalles para cada uno:
npm
mas aqui
cenador
más aqui
y el administrador de paquetes más reciente que no debe perderse, es joven y rápido en un entorno de trabajo real en comparación con npm, que estaba usando principalmente antes, para reinstalar módulos, verifica dos veces la carpeta node_modules para verificar la existencia del módulo, También parece que la instalación de los módulos lleva menos tiempo:
hilo
mas aqui
fuente
Puede encontrar alguna comparación técnica en npmcompare
Comparando browserify vs gruñido vs gulp vs webpack
Como puede ver, el paquete web está muy bien mantenido con una nueva versión que sale cada 4 días en promedio. Pero Gulp parece tener la comunidad más grande de todas (con más de 20K estrellas en Github) Grunt parece un poco descuidado (en comparación con los demás)
Entonces, si necesito elegir uno sobre el otro, iría con Gulp
fuente
Una pequeña nota sobre npm: npm3 intenta instalar dependencias de manera plana
https://docs.npmjs.com/how-npm-works/npm3#npm-v3-dependency-resolution
fuente
dedupe
opción de hacer lo mismowebpack-dev-server es un servidor web de recarga en vivo que los desarrolladores de Webpack usan para obtener comentarios inmediatos sobre lo que hacen. Solo debe usarse durante el desarrollo.
Este proyecto está fuertemente inspirado por el herramienta de prueba de unidad nof5 .
El paquete web, como su nombre lo indica, creará una era de paquete SIMPLE para la web . El paquete se minimizará y se combinará en un solo archivo (todavía vivimos en la edad HTTP 1.1).Paquete web hace la magia de combinar los recursos (JavaScript, CSS, imágenes) e inyectarlos así:
<script src="assets/bundle.js"></script>
.También se puede llamar módulo bundler porque debe comprender las dependencias de los módulos y cómo tomar las dependencias y agruparlas.
Puede usar Browserify en las mismas tareas exactas en las que usaría Webpack . - Webpack es más compacto, sin embargo.
Tenga en cuenta que las funciones del cargador del módulo ES6 en Webpack2 están utilizando System.import , que ningún navegador admite de forma nativa.
Puedes olvidarte de Gulp, Grunt, Brokoli, Brunch y Bower . Utilice directamente los scripts de línea de comando npm en su lugar y puede eliminar paquetes adicionales como estos aquí para Gulp :
Probablemente pueda usar los generadores de archivos de configuración Gulp y Grunt al crear archivos de configuración para su proyecto. De esta manera, no necesita instalar Yeoman o herramientas similares.
fuente
Yarn es un administrador de paquetes reciente que probablemente merece ser mencionado.
Entonces, aquí está: https://yarnpkg.com/
Hasta donde sé, puede obtener dependencias npm y bower y tiene otras características apreciadas.
fuente
Webpack
Es un bundler. ComoBrowserfy
se ve en la base de código para solicitudes de módulo (require
oimport
) y las resuelve de forma recursiva. Además, puede configurarloWebpack
para resolver no solo módulos similares a JavaScript, sino también CSS, imágenes, HTML, literalmente todo. Lo que me entusiasma especialmente esWebpack
que puedes combinar módulos compilados y cargados dinámicamente en la misma aplicación. Por lo tanto, uno obtiene un aumento de rendimiento real, especialmente a través de HTTP / 1.x. Cómo lo hace exactamente, lo describí con ejemplos aquí http://dsheiko.com/weblog/state-of-javascript-modules-2017/ Como alternativa para el paquete se puede pensarRollup.js
( https://rollupjs.org/ ) , que optimiza el código durante la compilación, pero elimina todos los fragmentos no utilizados encontrados.Para
AMD
, en lugar deRequireJS
uno puede ir con nativoES2016 module system
, pero cargado conSystem.js
( https://github.com/systemjs/systemjs )Además, señalaría que a
npm
menudo se usa como una herramienta de automatización comogrunt
ogulp
. Echa un vistazo a https://docs.npmjs.com/misc/scripts . Personalmente, ahora uso scripts npm solo para evitar otras herramientas de automatización, aunque en el pasado me gustaba muchogrunt
. Con otras herramientas, debe confiar en innumerables complementos para paquetes, que a menudo no están bien escritos y no se mantienen activamente.npm
conoce sus paquetes, por lo que llama a cualquiera de los paquetes instalados localmente por su nombre como:En realidad, por regla general, no necesita ningún complemento si el paquete es compatible con CLI.
fuente