Sempre que faço projetos, tenho que baixar todas as dependências dos módulos de nó. Sem copiar os node_modules, há alguma maneira de compartilhar os node_modules centrais em vários projetos?
como os seguintes, tenho que executar muitos comandos todas as vezes ..
npm install gulp-usemin
npm install gulp-wrap
npm install gulp-connect
npm install gulp-watch
npm install gulp-minify-css
npm install gulp-uglify
npm install gulp-concat
npm install gulp-less
npm install gulp-rename
npm install gulp-minify-html
require
módulo d. Caso contrário, não, não há umanode_modules
pasta "central" oficial para uso comrequire()
.npm install <npm_package_name> -g
Respostas:
Você absolutamente pode compartilhar um diretório node_modules entre projetos.
Da documentação do nó :
Portanto, basta colocar uma pasta node_modules dentro do diretório de seus projetos e inserir os módulos que desejar. Exija-os normalmente. Quando o node não encontra um diretório node_modules na pasta do seu projeto, ele verifica a pasta pai automaticamente. Portanto, faça sua estrutura de diretório assim:
Assim, mesmo as dependências do seu subprojeto podem se basear no seu repositório node_modules principal.
Uma desvantagem de fazer isso dessa maneira é que você terá que construir seu arquivo package.json manualmente (a menos que alguém saiba uma maneira de automatizar isso com o grunt ou algo assim). Quando você instala seus pacotes e adiciona o argumento --save a um
npm install
comando, ele o anexa automaticamente à seção de dependências ou ao seu package.json, o que é conveniente.fonte
Achei um truque, basta dar uma olhada nos links simbólicos (links simbólicos) no Windows ou Linux , está funcionando como um atalho, mas mais poderoso.
Basta criar um arquivo
Junction
para a suanode_modules
pasta onde quiser. A junção nada mais é do que um atalho para a pasta node_modules original. Crie-o dentro da pasta do seu projeto onde os node_modules reais teriam sido criados se usadosnpm install
.Para conseguir isso, você precisa de pelo menos uma
node_modules
pasta real e, em seguida, faça uma junção nela nos outros projetos.No Windows, você pode usar o Prompt de Comando ou usar um aplicativo. Usar o prompt de comando dá a você um pouco mais de controle, usar um aplicativo é mais fácil, sugiro Link Shell Extension .
fonte
mklink /d node_modules (source dir)\node_modules
.node_modules
a pasta do projeto em si, isso funciona. Só preciso lembrar de navegar até anode_modules
pasta real antes de instalar qualquer coisa nova: Pnpm install
em qualquer um dos aplicativos "conectados"?npm install <new-package>
todos os pacotes que não estão no package.json do seu projeto atual são removidos.Experimente pnpm em vez de npm.
Instale com:
Para atualizar suas instalações existentes (e subdiretórios), use:
Ou use o comando abreviado (deixe -r se você precisar direcionar apenas um diretório)
fonte
O diretório principal deve ser semelhante a este
node_modules Project 1 Project 2 Project 3 Project 4
apenas abra o arquivo
Project 1/.angular-cli.json
mude o esquema
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
para
"$schema": "./../node_modules/@angular/cli/lib/config/schema.json"
e não se esqueça de criar uma
node_modules
pasta vazia dentro do diretório do seu projetofonte
Olhando alguns artigos parece que o Lerna é uma boa ferramenta para gerenciar múltiplos projetos dentro de um único diretório (
monorepo
). Ele suporta o compartilhamento de módulos sem duplicar os pacotes inteiros em cada pasta e comandos para instalá-los em vários projetos.O pnpm também é uma ferramenta simples e eficiente, que não duplica os módulos já instalados para outros projetos.
fonte
Veja também o suporte do npm v7.0.0 para espaços de trabalho
https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
fonte
Vamos supor que tendo um único node_modules, ele deve conter todos os pacotes para todos os aplicativos. portanto, seus aplicativos também compartilharão a maioria das entradas exclusivas do package.json (apenas o nome deve mudar)
minha ideia seria ter uma única raiz e vários níveis src como abaixo
o único problema que você pode enfrentar seria ter um backup de json (ou tsconfig) para qualquer aplicativo e restaurá-los quando você trabalhar nele ou configurar seus scripts de inicialização para servir a qualquer aplicativo
fonte