Cli: [BUG] Execução de script de pacote de espaço de trabalho npm 7

Criado em 6 out. 2020  ·  5Comentários  ·  Fonte: npm/cli

Comportamento atual:

Dado um pacote com várias áreas de trabalho, npm install instala todos os pacotes da raiz e dos pacotes da área de trabalho na raiz node_modules . Ao contrário do yarn, nenhuma dependência dos pacotes de espaço de trabalho são instaladas no respectivo pacote de espaço de trabalho node_modules . Isso significa que não é possível executar scripts diretamente quando o diretório de trabalho atual é um subpacote.

Além disso, ainda não parece existir um comando npm workspace para executar scripts de pacotes de espaço de trabalho (compare com yarn workspace ).

Comportamento esperado:

Esta postagem do blog mencionou que o recurso de espaços de trabalho npm deve funcionar de maneira semelhante ao do yarn:

O npm v7 terá, pelo menos, o suporte de recursos de espaço de trabalho do Yarn e definirá o terreno para recursos de espaço de trabalho mais avançados na v8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019

Eu esperaria ser capaz de:

  1. Execute npm workspace @me/workspace-package1 my-script para executar o script my-script no pacote de espaço de trabalho @me/workspace-package1 (por exemplo, localizado em packages / package1)
  2. CD em um pacote de espaço de trabalho e execute diretamente um script a partir daí: cd packages/package1 && npm run my-script

Passos para reproduzir:

Eu criei um playground de espaço de trabalho para experimentar pacotes de espaço de trabalho e comparar fios e npm7:
https://github.com/fabb/npm7-workspaces

  1. No repo, execute npm install (bem-sucedido)
  2. No terminal cd applications/app1 && npm run build
  3. A compilação falha porque tsc não pode ser encontrado

Agora tente com fio:

  1. No repo, execute yarn (bem-sucedido)
  2. No terminal cd applications/app1 && yarn run build
  3. A construção é bem-sucedida

Alternativamente com fio:

  1. No repo, execute yarn (sucesso)
  2. No terminal yarn workspace @fabb/app1 build
  3. A construção é bem-sucedida

Meio Ambiente:

  • OS: macOS Catalina 10.15.7
  • Nó: v12.18.0
  • npm: 7.0.0-rc.2

Relacionados

RFC para espaços de trabalho: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

Comentários muito úteis

Embora não seja ideal; até que esse problema seja resolvido, uma solução alternativa é usar a opção --prefix (consulte os documentos ).

Por exemplo, usando as etapas de @fabb para reproduzir com o repo npm7-workspaces e substituindo o comando da etapa 2 pelo seguinte:

npm run --prefix applications/app1 build

A construção é bem-sucedida:

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 comentários

O link para o RFC dos espaços de trabalho é https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md

Tive uma dúvida relacionada ao recurso de espaços de trabalho npm7. Se eu tivesse que instalar um pacote apenas em uma área de trabalho específica, qual seria o comando npm para fazer isso. Yarn e Lerna apóiam isso.

Considere os seguintes espaços de trabalho.

{
  "workspaces": ["packages/*"]
}
root
+ -- packages
  + -- package-a
  + -- package-b

Fio

$ yarn workspace package-a add react

Lerna

lerna add suporta as opções de filtro de lerna

$ lerna add react --scope=package-a

Uma pergunta. Os espaços de trabalho npm, como o yarn , também exigem que o pacote raiz tenha "private": true ? A documentação deve incluir informações sobre isso.

Embora não seja ideal; até que esse problema seja resolvido, uma solução alternativa é usar a opção --prefix (consulte os documentos ).

Por exemplo, usando as etapas de @fabb para reproduzir com o repo npm7-workspaces e substituindo o comando da etapa 2 pelo seguinte:

npm run --prefix applications/app1 build

A construção é bem-sucedida:

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

Uma pergunta. Os espaços de trabalho npm, como o yarn , também exigem que o pacote raiz tenha "private": true ? A documentação deve incluir informações sobre isso.

@detj não, pelo que testei, não.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

FaizenR picture FaizenR  ·  3Comentários

DullReferenceException picture DullReferenceException  ·  4Comentários

ahuglajbclajep picture ahuglajbclajep  ·  3Comentários

chrisspen picture chrisspen  ·  3Comentários

dr-js picture dr-js  ·  3Comentários