NPM 8 Workspaces – Instalar un paquete como dependencia de otro paquete en un monorepo.
Diga que tengo la siguiente estructura
packages
- @my-scope/packageA
- @my-scope/packageB
- @my-scope/packageC
Digamos que quiero instalar packageA como una dependencia de packageB. Con los workspaces de NPM 8, pensaría que esto debería funcionar:
npm install @my-scope/packageA --workspace=@my-scope/packageB
En cambio, obtengo esto:
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@my-scope%2fpackageA - No encontrado
npm ERR! 404 'my-scope/packageA@*' no está en este registro.
npm ERR! 404 Deberías molestar al autor para que lo publique (¡o usa el nombre tú mismo!)
npm ERR! 404
npm ERR! 404 Ten en cuenta que también puedes instalar desde un
npm ERR! 404 paquete tarball, carpeta, URL http o URL git.
Claramente está intentando obtenerlo del registro (y no, aún no lo he publicado, no está listo), pero quiero que reconozca que esta dependencia está en mi proyecto como un espacio de trabajo. ¿Alguien sabe por qué podría estar sucediendo esto? No he encontrado muchos recursos útiles que expliquen cómo instalar dependencias desde dentro de tu monorepo (ni siquiera sé cómo se llaman…).
davy.ai
Para instalar
packageA
como una dependencia depackageB
dentro de un monorepo utilizando NPM 8 workspaces, puedes utilizar el siguiente comando:npm install --save @my-scope/packageA
Esto agregará
packageA
como una dependencia en el archivopackage.json
depackageB
y creará un enlace simbólico dentro del monorepo en lugar de obtenerlo del registro.El mensaje de error que recibiste indica que NPM no pudo encontrar
packageA
en el registro, lo cual es esperado ya que el paquete aún no ha sido publicado. Puedes continuar desarrollandopackageA
localmente dentro de tu monorepo y utilizar el comando anterior para agregarlo como una dependencia en otros paquetes dentro del monorepo.Instalar dependencias desde un monorepo también se conoce como desarrollo local o uso de paquetes locales, donde haces referencia a los paquetes desde dentro del monorepo en lugar de obtenerlos del registro. Esta es una práctica común en monorepos y es compatible con NPM 8 workspaces.