Cli: [BUG] Ejecución de la secuencia de comandos del paquete de espacio de trabajo npm 7

Creado en 6 oct. 2020  ·  5Comentarios  ·  Fuente: npm/cli

Comportamiento actual:

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 ).

Comportamiento esperado:

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:

  1. Ejecute 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)
  2. cd en un paquete de espacio de trabajo y ejecute directamente un script desde allí: cd packages/package1 && npm run my-script

Pasos para reproducir:

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

  1. En el repositorio, ejecute npm install (tiene éxito)
  2. En la terminal cd applications/app1 && npm run build
  3. La compilación falla porque tsc no se puede encontrar

Ahora prueba con hilo:

  1. En el repositorio, ejecute yarn (tiene éxito)
  2. En la terminal cd applications/app1 && yarn run build
  3. La construcción tiene éxito

Alternativamente con hilo:

  1. En el repositorio, ejecute yarn (tiene éxito)
  2. En la terminal yarn workspace @fabb/app1 build
  3. La construcción tiene éxito

Medio ambiente:

  • SO: macOS Catalina 10.15.7
  • Nodo: v12.18.0
  • npm: 7.0.0-rc.2

Relacionado

RFC para espacios de trabajo: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

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:

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

Todos 5 comentarios

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

Hilo

$ yarn workspace package-a add react

Lerna

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í.

¿Fue útil esta página
0 / 5 - 0 calificaciones