Potenciando los Monorepos con los Espacios de Trabajo de npm

Rate this content
Bookmark

Aprende más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarte a gestionar tu proyecto de monorepo mientras también exploras algunas de las nuevas características de la línea de comandos de npm.

FAQ

Los Espacios de Trabajo de NPM son una funcionalidad que permite gestionar múltiples paquetes anidados dentro de un solo paquete de nivel superior, centralizando la instalación de todas las dependencias en una única carpeta de Node Modules y facilitando la gestión de Monorepos.

El soporte para los Espacios de Trabajo de NPM se introdujo por primera vez en agosto de 2020 con el lanzamiento de la versión 7.0 de NPM CLI.

Para crear un nuevo espacio de trabajo en un proyecto NPM, puedes utilizar el comando `npm init`, que configura automáticamente los requisitos necesarios como un archivo package.json en la carpeta del nuevo espacio de trabajo y agrega la referencia al espacio de trabajo en el archivo package.json de nivel superior.

Para agregar una dependencia a un espacio de trabajo específico, puedes utilizar el comando `npm install` apuntando al espacio de trabajo deseado. Esto instalará la dependencia y la colocará como una dependencia en el archivo package.json del espacio de trabajo especificado.

La opción no-hoist es una configuración introducida por Yarn que permite especificar que ciertas dependencias deben mantenerse dentro de una carpeta node_modules en el espacio de trabajo específico, en lugar de ser elevadas al nivel superior. NPM está considerando implementar una funcionalidad similar.

Puedes ejecutar scripts en un espacio de trabajo específico utilizando el comando `npm run` seguido del nombre del espacio de trabajo y el script a ejecutar. Esto permite que el script se ejecute en el contexto del espacio de trabajo especificado.

El comando `npm pkg` permite establecer y recuperar claves y valores de los archivos package.json dentro de los espacios de trabajo, facilitando la gestión de configuraciones y datos en proyectos complejos.

Ruy Adorno
Ruy Adorno
25 min
20 Jun, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta Charla proporciona una introducción a los Espacios de Trabajo de npm y cubre varios aspectos de su uso, incluyendo cómo iniciar un espacio de trabajo con npm init, agregar dependencias, forzar versiones correctas de bibliotecas, ejecutar scripts y orquestar en un monorepo, y utilizar npm pkg y npm exec. Los ejemplos proporcionados demuestran casos de uso reales y resaltan la flexibilidad y el control que ofrecen los Espacios de Trabajo de npm. El orador también menciona mejoras y desarrollos futuros en la CLI de npm, enfatizando la importancia de las declaraciones correctas en el archivo package.json y la capacidad de gestionar datos en todos los espacios de trabajo.

1. Introducción a los Espacios de Trabajo de NPM

Short description:

Hola, y bienvenidos a la Masterclass de NPM Workspaces. Permítanme comenzar presentándome. Mi nombre es Rui Adorno. Soy un desarrollador de software en el equipo de NPM CLI de GitHub. He estado trabajando en NPM CLI durante casi tres años. Trabajo en la reescritura de NPM v7 y muchas de las características de las que hablaremos hoy, especialmente los espacios de trabajo.

Hola, y bienvenidos a la Masterclass de NPM Workspaces. Permítanme comenzar presentándome. Mi nombre es Rui Adorno. Soy un desarrollador de software en el equipo de NPM CLI de GitHub. He estado trabajando en NPM CLI durante casi tres años. Trabajo en la reescritura de NPM v7 y muchas de las características de las que hablaremos hoy, especialmente los espacios de trabajo. Estoy muy emocionado de compartir parte de ese trabajo con ustedes hoy.

Y comencemos con una descripción general de lo que vamos a cubrir hoy. Comencemos con una introducción a qué son los Espacios de Trabajo de NPM y luego cubriremos algunos ejemplos prácticos que se acerquen lo más posible al uso en la vida real, y también mencionaremos algunas de las cosas a las que deben estar atentos. Así que, empecemos.

Los Espacios de Trabajo de NPM. ¿Qué es eso? Comencemos con los Espacios de Trabajo, que es básicamente un concepto introducido por Yarn hace un tiempo, y básicamente es una forma de ayudarte a gestionar muchos paquetes dentro de un solo repositorio. Y para NPM, los Espacios de Trabajo de NPM es el nombre general que le dimos al conjunto de características que te ayudan a lograr eso. Básicamente te ayuda a gestionar múltiples paquetes anidados dentro de un solo paquete de nivel superior. Por lo tanto, te ayudará a centralizar la instalación de todas las dependencias en una sola carpeta de Node Modules, por lo que también terminarás teniendo solo un archivo de registro de paquetes. Y hay algunas ventajas en eso. Definitivamente es la forma ideal de gestionar Monorepos, y gracias a eso, puedes tener un solo lugar para gestionar todos tus problemas y básicamente gestionar tu proyecto y tu comunidad. Pero también desde el lado técnico, también puedes centralizar, tener un solo lugar para ejecutar todas tus pruebas, pares, linting, cualquier cosa que puedas imaginar. Necesitas tener todo junto para que tu proyecto funcione con todos los paquetes. Puedes tenerlo todo en un solo lugar. Por lo tanto, puede ser de gran ayuda dependiendo del estilo del proyecto que estés tratando de lograr. Otra cosa que me gustaría mencionar aquí es la línea de tiempo, solo para dar un poco de noción de cómo hemos estado mejorando iterativamente en los Espacios de Trabajo de NPM. Y puedes ver que todo comenzó en agosto de 2020 con el lanzamiento de la versión 7.0 de NPM CLI, que introdujo por primera vez el soporte para instalar los Espacios de Trabajo de NPM. Y luego, en la versión 7.7, otro gran avance que introdujo las propiedades de configuración de un espacio de trabajo o que apuntan a todos los espacios de trabajo y el primer comando que los admite con NPM run y NPM exec. No hubo muchos más, pero solo quería ilustrar cómo hemos estado mejorando y definitivamente puedes esperar ver más mejoras en los Espacios de Trabajo de NPM.

Entonces, comencemos con algunos ejemplos aquí. Tengo este proyecto que tengo a la izquierda aquí, que es una aplicación de muestra que he creado tratando de acercarme lo más posible a un proyecto de la vida real. Es una especie de aplicación web que consta de dos servicios diferentes. Puedes ver que tengo mi servicio de sincronización de usuarios, mi servicio de aplicación web e incluso configuro un tercer espacio de trabajo aquí, que son las diapositivas que estás viendo ahora mismo. Todos forman parte de este monorepo que estoy gestionando aquí.

2. Usando npm init para comenzar un Espacio de Trabajo

Short description:

Y con eso, espero poner algunos ejemplos que se acerquen mucho a cómo usarías esto en tu vida real. Así que puedes ver que todos tienen un montón de dependencias aquí usando Next.js, los servicios usando Fastify. Avanzando, me gustaría resaltar npm init. Probablemente sea la mejor manera de comenzar tu espacio de trabajo porque se asegurará de que cada paso necesario esté presente.

Y con eso, espero poner algunos ejemplos que se acerquen mucho a cómo usarías esto en tu vida real. Así que puedes ver que todos tienen un montón de dependencias aquí usando Next.js, los servicios usando Fastify. Así que puedo comenzar rápidamente ejecutando npm ls aquí y podemos ver cómo, y ls es un comando que conoce los espacios de trabajo y resaltará cada uno de los espacios de trabajo en mi proyecto e incluso enumerará las dependencias de cada espacio de trabajo cuando ejecute un npm ls. Por lo tanto, es el primer comando que tiene soporte de primera clase para los espacios de trabajo.

Avanzando aquí, me gustaría resaltar npm init. Probablemente sea la mejor manera de comenzar tu espacio de trabajo porque se asegurará de que cada paso necesario esté presente. Básicamente, todo lo que necesitas para rastrear un paquete anidado como un espacio de trabajo es asegurarte de tener la carpeta con un archivo package JSON dentro de ella, dentro de tu proyecto, y luego agregar el nombre de la carpeta a tu campo de workspaces en tu archivo package JSON en el nivel superior. Por lo tanto, usar npm init se asegurará de que esos requisitos estén presentes. Voy a ejecutar un ejemplo rápido aquí en mi aplicación de muestra, voy a crear un nuevo espacio de trabajo. Digamos que lo llamaré `website`. Así que puedo ejecutar npm init, estoy usando -Y aquí para aceptar todas las opciones predeterminadas y estoy apuntando a un sitio web. Eso creará una carpeta `website` con un archivo package.json dentro de ella, y mostrará el contenido del archivo package.json aquí. Y como mencioné antes, el otro punto realmente importante que npm init se encarga es colocar la referencia al `website` dentro de mi archivo package.json en mi carpeta de nivel superior. Con eso, todo está configurado. Si ejecuto npm install aquí, ahora el árbol de instalación rastreará el `website`. Y si vuelvo a ejecutar npm ls, veré que `website` está listado como uno de los espacios de trabajo aquí resaltado en verde. Esa es definitivamente la forma recomendada de comenzar con un nuevo espacio de trabajo dentro de tu proyecto.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
Aprenda más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarlo a administrar su proyecto monorepo, mientras también explora algunas de las nuevas características de npm cli.
Poner fin al dolor: Repensando CI para Monorepos Grandes
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Poner fin al dolor: Repensando CI para Monorepos Grandes
Escalar bases de código grandes, especialmente monorepos, puede ser una pesadilla en los sistemas de Integración Continua (CI). El panorama actual de las herramientas de CI tiende a ser orientado a máquinas, de bajo nivel y exigente en términos de mantenimiento. Lo peor es que a menudo están desconectadas de las necesidades y el flujo de trabajo real del desarrollador.¿Por qué es un obstáculo el CI? Porque los sistemas de CI actuales son comodines, sin una comprensión específica de tu base de código. No pueden aprovechar el contexto en el que operan para ofrecer optimizaciones.En esta charla, exploraremos el futuro del CI, diseñado específicamente para bases de código grandes y monorepos. Imagina un sistema de CI que comprenda la estructura de tu espacio de trabajo, paralelice dinámicamente las tareas en máquinas utilizando datos históricos, y haga todo esto con una configuración mínima y de alto nivel. Repensemos el CI, haciéndolo más inteligente, eficiente y alineado con las necesidades del desarrollador.
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
La charla será una historia de cómo Personio pasó de renderizar a través de una arquitectura PHP monolítica, a una aplicación Next JS orientada a microfrontends, impulsada por la Federación de Módulos y la cadena de herramientas del monorepositorio NX.
Escala tu aplicación de React sin micro-frontends
React Summit 2022React Summit 2022
21 min
Escala tu aplicación de React sin micro-frontends
A medida que tu equipo crece y se convierte en múltiples equipos, el tamaño de tu base de código también crece. Llegas a las 100k líneas de código y el tiempo de compilación se acerca peligrosamente a los 10 minutos 😱 Pero eso no es todo, tus verificaciones estáticas de CI (linting, cobertura de tipos, código muerto) y pruebas también están tardando cada vez más...¿Cómo puedes mantener a tus equipos avanzando rápidamente y enviando funciones a los usuarios de manera regular si tus PRs tardan una eternidad en ser probados y desplegados?Después de explorar algunas opciones, decidimos seguir el camino de Nx. ¡Veamos cómo migrar una gran base de código a Nx y aprovechar sus compilaciones incrementales!
La Era de los Monorepos
JSNation 2022JSNation 2022
25 min
La Era de los Monorepos
La historia de la web se puede dividir en saltos evolutivos en el desarrollo. La era de los scripts en línea, la era de jQuery, la era de las SPAs, la era de JAMStack...Ahora estamos entrando en la siguiente etapa que ha sido cuidadosamente preparada en los últimos años. Permíteme invitarte al mundo de las soluciones modernas de monorepo y compartir contigo los beneficios que obtendrás al usarlas en proyectos de cualquier tamaño y configuración. Es hora de automatizar esas tareas de boilerplate y reducir los cuellos de botella para que puedas centrarte en lo que realmente importa.¡Prepárate para el próximo salto! ¡Bienvenido a la era de los monorepos!
Remixando tu Stack en un Espacio de Trabajo Monorepo
Remix Conf Europe 2022Remix Conf Europe 2022
22 min
Remixando tu Stack en un Espacio de Trabajo Monorepo
Remix entró en escena con una visión única y refrescante sobre cómo desarrollar en la web. Pero, ¿cómo lo integras en tu ecosistema existente de aplicaciones? ¿Quieres probar Remix en un proyecto pequeño o quieres ir a fondo, pero es complicado hacer una migración completa desde tu aplicación React existente? En esta charla, vamos a explorar cómo una organización de código basada en monorepo puede ayudar a integrar Remix con tu infraestructura existente de React y TypeScript, facilitando la reutilización de código y un camino de migración hacia Remix.

Workshops on related topic

React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido
Monorepos de Node con Nx
Node Congress 2023Node Congress 2023
160 min
Monorepos de Node con Nx
Top Content
WorkshopFree
Isaac Mann
Isaac Mann
Varias apis y varios equipos en el mismo repositorio pueden causar muchos dolores de cabeza, pero Nx te tiene cubierto. Aprende a compartir código, mantener archivos de configuración y coordinar cambios en un monorepo que puede escalar tanto como tu organización. Nx te permite dar estructura a un repositorio con cientos de colaboradores y elimina las desaceleraciones de CI que normalmente ocurren a medida que crece la base de código.
Índice de contenidos:- Laboratorio 1 - Generar un espacio de trabajo vacío- Laboratorio 2 - Generar una api de node- Laboratorio 3 - Ejecutores- Laboratorio 4 - Migraciones- Laboratorio 5 - Generar una biblioteca de autenticación- Laboratorio 6 - Generar una biblioteca de base de datos- Laboratorio 7 - Añadir un cli de node- Laboratorio 8 - Limites de módulo- Laboratorio 9 - Plugins y Generadores - Introducción- Laboratorio 10 - Plugins y Generadores - Modificación de archivos- Laboratorio 11 - Configuración de CI- Laboratorio 12 - Caché distribuida
Encontrar, Hackear y solucionar las vulnerabilidades de NodeJS con Snyk
JSNation 2022JSNation 2022
99 min
Encontrar, Hackear y solucionar las vulnerabilidades de NodeJS con Snyk
WorkshopFree
Matthew Salmon
Matthew Salmon
npm y seguridad, ¿cuánto sabes sobre tus dependencias?Hack-along, hacking en vivo de una aplicación Node vulnerable https://github.com/snyk-labs/nodejs-goof, Vulnerabilidades tanto de código abierto como de código escrito. Se anima a descargar la aplicación y hackear junto con nosotros.Corrigiendo los problemas y una introducción a Snyk con una demostración.Preguntas abiertas.
Construye aplicaciones Web3 con React
React Summit 2022React Summit 2022
51 min
Construye aplicaciones Web3 con React
WorkshopFree
Shain Dholakiya
Shain Dholakiya
El masterclass está diseñado para ayudar a los desarrolladores Web2 a comenzar a construir para Web3 utilizando el Hyperverse. El Hyperverse es un mercado abierto de módulos inteligentes construidos por la comunidad, auditados y fáciles de descubrir. Nuestro objetivo es hacer que sea fácil para los desarrolladores de React construir aplicaciones Web3 sin escribir una sola línea de código de contrato inteligente. Piensa en 'npm para contratos inteligentes'.
Aprende más sobre el Hyperverse aquí.
Repasaremos todos los conceptos básicos de blockchain/crypto que necesitas saber para comenzar a construir en el Hyperverse, por lo que no necesitas tener ningún conocimiento previo sobre el espacio Web3. Solo necesitas tener experiencia en React.