
Por lo general, hay dos tipos de herramientas de compilación de JavaScript: rodillos de stock y grupos de módulos. En este artículo, analizaremos cómo usar las Escrituras de compilación de NPM específicas para el proyecto como un rodillo de construcción y tarea, en lugar de confiar en tareas como Gulp y Primer o en paquetes de módulos. Grunt y Gulp ejecutan tareas, automatizan tareas manuales recurrentes en un proceso de desarrollo. Webpack, por otro lado, es un grupo de módulos que asumen piezas de código de aplicación separadas, cada una con sus propias adicciones y las agrupa en activos estáticos.
En nuestro artículo de Primer y Gulp, mencionamos otra alternativa de herramientas de construcción en la que realmente no ingresamos: las Escrituras de NPM. Algunos de ustedes han preguntado en los comentarios que le gustaría obtener más información sobre cómo puede usar scripts NPM como una herramienta de construcción/rodillo de tareas, por lo que eso es exactamente lo que veremos. ¿Por qué los scripts de NPM? Si usa herramientas de compilación como Primer, Gulp y Webpack para suficiente tiempo, comenzará a Real que hace las cosas y eso significa que cada herramienta viene con sus propios extraños y problemas para aprender.
Tanto el imprimación como el GULP se basan en gran medida en el uso de complementos para agregar funcionalidad, y la mayoría de estos complementos son paquetes alrededor de los paquetes de NPM existentes. Esto puede conducir a problemas como:
No hay un complemento para el paquete que desea usar.
El complemento está desactualizado y no acepta correctamente el paquete básico. La placa no acepta una función que le gustaría usar para el paquete básico.
Falta la documentación del complemento o no está clara.
El complemento no maneja bien los errores.
Debido a que la mayoría de los paquetes generalmente tienen una CLI, una solución simple a estos problemas sería la eliminación completa de las herramientas de construcción abstractas (a veces complejas) y el funcionamiento manual de los paquetes subyacentes en la línea de control. Esta es una gran solución, pero ¿cómo recordará todos estos comandos CLI y sus opciones? ¿Y cómo los unirás? ¿No sería bueno si pudieras ejecutar un solo pedido de CLI y hacer que todos funcionen en el orden correcto y al mismo tiempo?
Las Escrituras de NPM ingresan las Escrituras NPM, que existen al menos a la versión 6 del NPM. Usando la propiedad Scripts desde el archivo Packle.json, puede definir scripts personalizados para ejecutar varios comandos CLI. Es muy similar a la herramienta GNU Make, utilizada por los desarrolladores de aplicaciones de escritorio para sistemas similares de UNIX para construir y administrar sus aplicaciones. Después de definir sus scripts en el paquete. Si alguna vez ha usado un paquete que le pidió que ejecute un pedido como la prueba de ejecución de NPM o NPM, entonces usó scripts NPM.
Un script puede ser tan simple como un solo comando terminal o una serie de comandos más complejas que se ejecutarán en cierto orden. Para usar scripts NPM como herramienta de compilación, definiremos muchos scripts en un archivo paquete.json, similar a la definición de las tareas que queremos ejecutar en un archivo de configuración en otras herramientas de compilación. La diferencia con los scripts NPM es que ejecutaremos el paquete CLI sin ningún complemento, luego vincularemos los scripts, para que podamos activar una construcción con un solo comando. Para fines demostrativos, recrearemos el mismo proceso de construcción que hemos utilizado en el artículo Gulp vs Grurt: Compare SASS en CSS.
Concatena y reducir CSS y JavaScript.
Optimizar las imágenes.
Ejemplo del proyecto creamos un depósito de GitHub como una demostración de lo que probamos aquí. Tiene un paquete. Json preconfigurado, incluidos todos los paquetes NPM que utilizamos.
Sass: se usa para convertir SASS en CSS.
Concat: se usa para concatena (uno) varios archivos.
Clean-CSS-CLI: CLI para CSE-CSS, un optimizador CSS rápido y eficiente.
Uglify-JS: Parser JavaScript, Minifier, Compressor and Beauty.
OnCange: Mire los conjuntos de archivos y ejecute un pedido cuando algo se agrega, cambie o elimine.
NPM-RUN-ALL: Rode varios scripts NPM en paralelo o secuencial.
@Squeosh/CLI: una CLI para Squoosh, un optimizador de imágenes.
El paquete @scoososh/cli es un reemplazo del paquete Imagemin-CLI que utilicé en el artículo Grurt vs Gulp porque el paquete Imagemin ya no se mantiene.
El almacén también contiene todos los archivos necesarios y el contenido demostrativo, por lo que puede usarlo para experimentar con los scripts NPM que configuraremos. Creando su primer script para nuestro primer script NPM, comencemos compilando nuestro archivo SASS en CSS usando el paquete SASS. Primero debemos instalarlo: NPM Instale Sass-Save-Dev esto instala el paquete en el Director Node_Modules. Tenga en cuenta que-Save-Dev guarda este paquete en la sección Devdependencies del archivo Packle.json. Esto facilita a otros desarrolladores instalar los paquetes necesarios en el futuro, simplemente ejecutar la instalación de NPM. De acuerdo con las instrucciones sobre el uso del instrumento de línea de comandos SASS, podemos compilar nuestros activos/scss/style.scss en distin/css/ Style .CSS Usando el siguiente comando: Sass Assets/SCSS/style.scss Dist/css/style.csss, así que agregue este comando como un script NPM llamado SCSS en nuestro archivo paquete.json: “scripts”: {“scss”: ” Sass Assets/SCSS/style.scss dist/css/style.css “} Ahora ejecute npm ejecutar scss desde la línea de comando. Debería ver su archivo SASS compilado con éxito en el CSS, y el resultado de su pedido debe ser el mismo que el manual SASS en ejecución.
[Correo electrónico protegido] : ~/desarrollo/proyectos/npm-scripts $ npm roll scss
> [correo electrónico protegido] SCSS
> Assets Sass/SCSS/style.scss dist/css/style.css
Este proceso se puede repetir para el resto de los requisitos de nuestro proyecto. Probar órdenes Si descubre que el script no hace lo que espera, puede probar manualmente asociado en el terminal usando el comando NPX. Este comando le permite ejecutar cualquier otro pedido arbitrario desde un paquete instalado localmente. Para probar el orden para el script SCSS con NPX, puede ejecutarlo de la siguiente manera: NPX Sass Assets/SCSS/style.scss Dist/CSS/style.css Agregar más scripts Podemos seguir el mismo procedimiento para cualquier script adicional que queramos Para agregar. Instale el paquete con NPM.
Configure el script en la sección Scripts del archivo Packle.json, para ejecutar el comando terminal relevante.
La cadena de los guiones también puede encadenar las Escrituras. Esto se debe al hecho de que la ejecución de NPM es en sí misma un pedido y se puede ejecutar desde otros scripts. Por ejemplo: “scripts”: {… “concat: css”: “concat -o dista/css/style.css distin/css/style.css activos/css/test.css”, “concat: js”: “Mkdir -p distinto/js && convvert -o distrito/js/scrips.js Evals/js/test1.js Evals/js/test2.js”, “Concat”: “NPM Run conquistado: CSS && NPM Run Conqued: JS: JS ” Podríamos ejecutarlos por separado, pero normalmente es útil poder ejecutarlos como un solo comando. Podemos hacer esto creando un nuevo script conquistado que ejecuta ambos scripts usando NPM Run.
Scripts de grupo Una vez que tengamos todos los paquetes necesarios instalados, la sección Devdependencias del paquete.: “^5.5.0”, “conquistado”: “^1.0.3”, “npm”: “^8.3.0”, “npm -All “:”^4.1.5 “,” onchange “:”^7.1.0 “,” sass “:”^1.48.0 “,” uglify-js “:”^3.14.5 “} No voy Para ingresar los detalles de todas las Escrituras que he configurado en el proyecto Ejemplo, pero ahora sabe cómo funcionan las Escrituras NPM, probablemente pueda descubrir qué hace cada uno de los siguientes scripts: “Scripts”: {“SCSS”: “Node – – Sass -o DISTA/CSS Assets/SCSS/style.scss “,” Concat: CSS “:” Concat -O Distin/CSS/Style.css Distin/CSS/Style.css Assets/CSS/Test.css “,” Concat : js “:” mkdir -p distinto/js && cond -o distrito /js/scripts.js activos/js/test.js activos/js/test2.js “,” concat “:” npm run concat: css && npm Ejecutar concat: js “,” cssmin “:” cleanCSS -o Dist./ css/styleles.min.css distin/css/style.css “,” Uglify “:” Uglifyjs -o distin/js/scrips.min.j.j S Dist/JS/scripts.js “,” Squeosh “:” Squoosh -cli –Mozjpeg ‘{Quality: 70}’ Assets/img -d img “,” Build: CSS “:” NPM Run SCSSS && NPM Run Concat : Css && npm run cssmin “,” Build: js “:” npm run concat: js && npm run eglify “,” construir: img “:” npm run scoosh “,” construir “:” npm run construir: css &&
NPM Run Build: JS && NPM Run Build: IMG “}, la parte importante que quiero resaltar es en la parte inferior, donde tengo scripts de compilación de compilación para grupos de scripts individuales (CSS, JS, IMG) y luego he encadenado en un solo script llamado construcción. Dividir las cosas en grupos lógicos no solo hace que sea más fácil encadenar los scripts, sino que también ayuda cuando es posible que solo desee compilar un cierto grupo de activos. Por ejemplo, siga los cambios.
Los siguientes cambios son útiles para poder comparar todos sus activos frontales utilizando un solo comando de compilación de ejecución de NPM, pero rápidamente se volverá molesto si tiene que ejecutarlo después de cada cambio de parte del código. En estas situaciones, es mejor dejar que un script siga los cambios realizados en su código y luego ejecute automáticamente scripts de compilación. Podemos lograr esto utilizando el comando Onchange Package. El comando Onchange funciona observando los archivos que especifica usando un modelo Globe, luego ejecutando un pedido que especifique (después). Por ejemplo, para construir nuestros archivos CSS cuando nuestros archivos SASS cambien: Onchange ‘Assets/SCSS/*. SCSS’ – NPM Ejecutar Build: CSS para que podamos crear algunas escrituras de reloj y agregarlas al paquete. JSON: “Scripts” : {… “Watch: CSS”: “Onchange ‘Assets/SCSS/*. SCSS’ – NPM Run Build: CSS”, “Watch: JS”: “OnChange ‘Assets/JS/* .js’ – NPM Run Build: JS “…} Ahora, si ejecutamos NPM Run Watch: CSS, seguirá los cambios en nuestros archivos SASS y ejecutará NPM Ej. Ejecutando los scripts en paralelo para asumir que desea ejecutar ambos scripts de reloj al mismo tiempo cuando trabaja en archivos CSS y JS. Ejecución de NPM Run Watch: CSS &&
NPM Run Watch: JS no funcionará, porque estos comandos se ejecutan en la secuencia (es decir, Watch: JS no se ejecutará hasta que Watch: CSS no esté hecho). ¿Cómo ejecutamos estos scripts en paralelo? Aquí entra en juego el comando de paquete NPM-ALL. NPM-RUN-ALL tiene una bandera pralelada que nos permite ejecutar grupos de embarazos al mismo tiempo. Entonces, creemos un nuevo script de reloj: “scripts”: {… “watch”: “npm-all-parallel watch:*” …} Este comando ejecutará cualquier escritura de reloj:* que le- definimos En paralelo para que podamos trabajar en nuestros archivos CSS y JS y reconstruirlos al mismo tiempo. ¡Éxito! Nuestros scripts finales de NPM ahora son: “Scripts”: {“SCSS”: “Sass Assets/SCSS/style.scss dist/css/style.css”, “concat: css”: “concat -o distin/css/style. Css dist/css/style.css activos/css/test.css “,” concat: js “:” mkdir -p dista/js && concat -o/js/scripts.js activos/js/test1.js activos/js /Test2.js “,” concat “:” npm run concat: css && npm run concat: js “,” cssmin “:” cleancss -o dist/css/siyles.min.css dist/css/styles.css “,, “Uglify”: “uglifyjs -o distin/js/scrips.min.js distin/js/scrips.js”, “squoosh”: “squoosh -cli –mozjpeg ‘{Quality: 70}’ activos/img -d disty /Img “,” Build: CSS “:” NPM Run SCSSS && NPM Run conquistado: CSS && NPM Run CSSmin “,” Build: JS “:” NPM Run Concat: JS && NPM Run Uglify “,” Build: IMG “: “NPM Run Squeosh”, “Build”: “NPM Run Build: CSS && NPM Run Build: JS &&
NPM Run Build: IMG “,” Watch: CSS “:” Onchange ‘Assets/SCSS/*. SCSS’ – NPM Run Build: CSS “,” Watch: JS “:” Onchange ‘Assets/JS/*. JS’ – – – NPM Run Build: JS “,” Watch “:” NPM-All-Prallel Watch:*”}, utilizando sus scripts para implementaciones, la otra ventaja de usar las Escrituras de NPM de esta manera, es que es posible construir scripts de compilación reutilizados para implementar para implementar sus activos en un servidor. Por ejemplo, suponga que utiliza scripts NPM para crear sus activos front-end para un sitio web o aplicación que administre a través de GitHub y alojamiento con spinUpwp. Usando el soporte de git spinUpwp, se configurará para extraer automáticamente el Código desde el depósito de GitHub. Sin embargo, los activos no se construirán hasta que use SSH en el servidor y no ejecutará la instalación de NPM y la ejecución de NPM. SpinUpwp:
En el ejemplo anterior, creamos un pequeño ejemplo de un sitio implementado desde un almacén GIT.El almacén tiene los mismos archivos de activos y scripts NPM como nuestro proyecto de ejemplo.La única adición es un archivo index.html, que muestra algunos datos demostrativos utilizando CSS, JavaScript y la imagen creada por nuestros scripts NPM.En el cuadro de script de implementación en spinUpWP, agregamos los siguientes dos comandos: NPM Instalar NPM Ejecutar compilación Ahora, cada vez que presiono un nuevo código, SpinUpWP ejecutará los comandos de implementación de script después de tomar cambios GIT, instalará cualquier paquete NPM nuevo que l L L l L L l. -Te agrego y reconstruyo todos mis activos front-end.🙂 Veredicto Ahora debe tener una buena idea de cómo se ve para crear una herramienta de compilación utilizando solo scripts NPM y paquetes CLI.Entonces, ¿debería usar scripts NPM en lugar de una herramienta de compilación como imprimación o trago?

Me inclino a creer que los scripts NPM parecen ser una solución más ordenada de la que tengo que instalar y aprender las abstracciones de herramientas de construcción como imprimación y trago, especialmente para proyectos más pequeños. Sin embargo, puedo imaginar mi archivo de paquete. JSON se vuelve bastante desordenado y complejo para proyectos más grandes, con muchos scripts. En ese momento, es probable que tener un archivo de configuración separado y dedicado para su construcción tenga más sentido. Además, el rendimiento parece ser mucho peor que el imprimador y el trago. Los scripts NPM no tienen la ventaja de poder usar los flujos de nodos como lo hace Gulp, pero incluso el imprimación ha funcionado mucho más rápido que los scripts NPM. Debido al reemplazo de Imagemin-CLI con @Squeosh/CLI, es difícil comparar los puntos de referencia directamente con el rendimiento del cebador/Gulp, pero incluso si omitimos el procesamiento de imágenes, los scripts NPM son lentos: Primer: 1.6 segundos
Glup: 0.84 segundos
Escrituras de NPM (sin procesamiento de imágenes): 2.0 segundos

Escrituras de NPM (con procesamiento de imágenes): 6.0 segundos
Uso de las Escrituras de NPM como herramienta de compilación
Tags Uso de las Escrituras de NPM como herramienta de compilación
homefinance blog