Dado un paquete con varios espacios de trabajo, npm install
instala todos los paquetes de la raíz y de los paquetes del espacio de trabajo en la raíz node_modules
. A diferencia de yarn, no se instalan dependencias de los paquetes de espacio de trabajo en el paquete de espacio de trabajo respectivo node_modules
. Eso significa que no es posible ejecutar scripts directamente cuando el directorio de trabajo actual es un subpaquete.
Además, todavía no parece existir un comando npm workspace
para ejecutar scripts desde paquetes de espacio de trabajo (comparar con yarn workspace
).
Esta publicación de blog mencionó que la función de espacios de trabajo npm debería funcionar de manera similar a la de yarn:
npm v7 tendrá al menos la compatibilidad con la función de espacio de trabajo de Yarn y preparará el escenario para funciones de espacio de trabajo más avanzadas en v8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019
Esperaría poder:
npm workspace @me/workspace-package1 my-script
para ejecutar el script my-script
en el paquete del espacio de trabajo @me/workspace-package1
(por ejemplo, ubicado en packages / package1)cd packages/package1 && npm run my-script
He creado un patio de recreo de espacio de trabajo para experimentar con paquetes de espacio de trabajo y comparar yarn y npm7:
https://github.com/fabb/npm7-workspaces
npm install
(tiene éxito)cd applications/app1 && npm run build
tsc
no se puede encontrarAhora prueba con hilo:
yarn
(tiene éxito)cd applications/app1 && yarn run build
Alternativamente con hilo:
yarn
(tiene éxito)yarn workspace @fabb/app1 build
RFC para espacios de trabajo: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
El enlace al RFC de los espacios de trabajo es https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
Tenía una pregunta relacionada con la función de espacios de trabajo npm7. Si tuviera que instalar un paquete solo en un espacio de trabajo específico, ¿cuál es el comando npm para hacer eso? Tanto Yarn como Lerna apoyan esto.
Suponga los siguientes espacios de trabajo.
{
"workspaces": ["packages/*"]
}
root
+ -- packages
+ -- package-a
+ -- package-b
$ yarn workspace package-a add react
lerna add admite las opciones de filtro de lerna
$ lerna add react --scope=package-a
Una pregunta. ¿Los espacios de trabajo npm, como yarn , también requieren que el paquete raíz tenga "private": true
? La documentación debe incluir información sobre esto.
Si bien no es ideal; hasta que se resuelva este problema, una solución alternativa es usar la opción --prefix
(ver documentos ).
Por ejemplo, usando los pasos de @fabb para reproducir con el repositorio npm7-workspaces y reemplazando el comando del paso 2 con lo siguiente:
npm run --prefix applications/app1 build
La construcción tiene éxito:
npm7-workspaces % npm -v
7.0.2
npm7-workspaces % npm run --prefix applications/app1 build
> @fabb/[email protected] build
> tsc index.ts
npm7-workspaces % echo $?
0
Una pregunta. ¿Los espacios de trabajo npm, como yarn , también requieren que el paquete raíz tenga
"private": true
? La documentación debe incluir información sobre esto.
@detj no, por lo que he probado no es así.
Comentario más útil
Si bien no es ideal; hasta que se resuelva este problema, una solución alternativa es usar la opción
--prefix
(ver documentos ).Por ejemplo, usando los pasos de @fabb para reproducir con el repositorio npm7-workspaces y reemplazando el comando del paso 2 con lo siguiente:
La construcción tiene éxito: