Siempre que hago proyectos, tengo que descargar todas las dependencias de los módulos de nodo. Sin copiar los node_modules, ¿hay alguna forma de compartir los node_modules centrales en múltiples proyectos?
como los siguientes, tengo que ejecutar muchos comandos cada vez.
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. De lo contrario, no, no hay unanode_modules
carpeta "central" oficial para usarrequire()
.npm install <npm_package_name> -g
Respuestas:
Absolutamente puede compartir un directorio node_modules entre proyectos.
De la documentación del nodo :
Así que simplemente coloque una carpeta node_modules dentro de su directorio de proyectos y coloque los módulos que desee. Solo requiéralos como de costumbre. Cuando el nodo no encuentra un directorio node_modules en la carpeta de su proyecto, verificará la carpeta principal automáticamente. Así que haga su estructura de directorio así:
Así que así, incluso las dependencias de su subproyecto pueden basarse en su repositorio principal node_modules.
Un inconveniente de hacerlo de esta manera es que tendrás que construir tu archivo package.json manualmente (a menos que alguien sepa cómo automatizar esto con gruñido o algo así). Cuando instala sus paquetes y agrega --save arg a un
npm install
comando, lo agrega automáticamente a la sección de dependencias o su package.json, lo cual es conveniente.fuente
Encontré un truco, solo eche un vistazo a los enlaces simbólicos (enlaces simbólicos) en Windows o Linux , funciona igual que los atajos pero es más poderoso.
Simplemente necesita hacer un
Junction
para sunode_modules
carpeta en cualquier lugar que desee. La unión no es más que un atajo a su carpeta node_modules original. Créelo dentro de la carpeta de su proyecto donde se habrían creado los módulos node_modules reales si se hubieran usadonpm install
.Para lograr esto, necesita al menos una
node_modules
carpeta real y luego haga un cruce en los otros proyectos.En Windows, puede usar el símbolo del sistema o usar una aplicación. Usar el símbolo del sistema le brinda un poco más de control, usar una aplicación es más fácil, sugiero Link Shell Extension .
fuente
mklink /d node_modules (source dir)\node_modules
.node_modules
en la carpeta del proyecto, esto funciona. Solo tengo que recordar buscar lanode_modules
carpeta real antes de instalar algo nuevo: Pnpm install
en cualquiera de las aplicaciones "conectadas"?npm install <new-package>
todos los paquetes que no están en el package.json de su proyecto actual se eliminan.Pruebe pnpm en lugar de npm.
Instalar con:
Para actualizar sus instalaciones (y subdirectorios) existentes, utilice:
fuente
El directorio principal debería verse así
node_modules Project 1 Project 2 Project 3 Project 4
solo abre el archivo
Project 1/.angular-cli.json
cambiar el esquema
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
a
"$schema": "./../node_modules/@angular/cli/lib/config/schema.json"
y no olvide crear una
node_modules
carpeta vacía dentro del directorio de su proyectofuente
Al mirar algunos artículos, parece que Lerna es una buena herramienta para administrar múltiples proyectos dentro de un solo directorio (
monorepo
). Admite compartir módulos sin duplicar los paquetes completos en cada carpeta y comandos para instalarlos en múltiples proyectos.pnpm también es una herramienta simple y eficiente, que no duplica los módulos que ya están instalados para otros proyectos.
fuente
Supongamos que teniendo un solo node_modules debe contener todos los paquetes para todas las aplicaciones. por lo tanto, sus aplicaciones también compartirán la mayoría de las entradas únicas de package.json (solo el nombre debería cambiar)
mi idea sería tener una sola raíz y varios niveles de src como se muestra a continuación
el único problema que podría enfrentar sería tener una copia de seguridad de json (o tsconfig) para cualquier aplicación y restaurarla cuando trabaje en ella o configurar sus scripts de inicio para servir cualquier aplicación
fuente
Consulte también el soporte de npm v7.0.0 para espacios de trabajo
https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
fuente