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
).
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:
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)cd packages/package1 && npm run my-script
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
npm install
(bem-sucedido)cd applications/app1 && npm run build
tsc
não pode ser encontradoAgora tente com fio:
yarn
(bem-sucedido)cd applications/app1 && yarn run build
Alternativamente com fio:
yarn
(sucesso)yarn workspace @fabb/app1 build
RFC para espaços de trabalho: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
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
$ yarn workspace package-a add react
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.
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:
A construção é bem-sucedida: