Debido a https://github.com/npm/npm/issues/2943 , npm nunca admitirá la capacidad de crear alias de paquetes e instalar múltiples versiones del mismo paquete.
Las soluciones publicadas sobre el problema de github podrían funcionar para módulos JS puros, pero a medida que npm se convierte en un estándar para la administración de paquetes frontend, los paquetes ahora incluyen varios activos como CSS.
¿Existe alguna solución para instalar varias versiones del mismo paquete?
La mejor idea que se me ha ocurrido es "clonar" un paquete y publicarlo con un nombre ligeramente diferente.
Por ejemplo, si necesita varias versiones de jquery
, usted podría publicar paquetes llamados jquery-alias1
, jquery-alias2
, jquery-alias3
etc, y luego configurar las versiones adecuadas en su package.json
.
O bien, podría nombrar a los paquetes en función de su número de versión, por ejemplo jquery-1.11.x
, jquery-2.1.x
, etc ..
Sin embargo, ambos enfoques parecen descuidados. ¿Hay mejores?
Respuestas:
A partir de npm v6.9.0, npm ahora admite alias de paquetes. Se implementa la misma sintaxis como los usos del hilo:
Esto agrega lo siguiente a
package.json
:También es posible instalar directamente desde GitHub con esta sintaxis. Por ejemplo, si desea instalar tanto la versión de registro npm como una bifurcación de GitHub del paquete
foobar
:fuente
eslint
, pero no sabía que ahora se llamabaeslint6
Quería publicar aquí para cualquier persona como yo que esté usando Yarn y haya aterrizado aquí. Es un reemplazo más o menos directo de NPM que admite la creación de alias desde el primer momento:
(el crédito, por ejemplo, va a https://github.com/callemall/material-ui/issues/7195#issuecomment-314547601 )
fuente
<alternative-name>@npm:<package-name>@<version>
Parece que "JSPM" podría ser exactamente la herramienta que está buscando. JSPM se basa en NPM pero le permite extraer paquetes de múltiples fuentes (github, npm, etc.). Utiliza el cargador de módulos universal System.js en la interfaz para cargar módulos, y "utiliza la gestión de versiones planas para descargar en carpetas con sufijos de versión" que son fáciles de razonar.
jspm.io
Cuando instala un paquete con jspm, puede asignar un alias a ese paquete con un nombre en particular, que más tarde podrá
require
especificar en sus módulos.Luego, en su js, puede simplemente
require(jquery)
y / orequire(jqueryOne)
según sea necesario, lo que le permite ir y venir según sea necesario.Esto es lo mismo para cualquier paquete del que le gustaría usar varias versiones.
fuente
Esto es bastante difícil de hacer de manera limpia, debido a la forma en que funciona npm, por lo que evitaría intentar hacerlo en producción.
Sin embargo, para las pruebas de integración y casos de uso similares, creé un paquete llamado multidep , que le permite instalar múltiples versiones del mismo paquete y
require
así:fuente
La versión de instalación de NPM ( https://github.com/scott113341/npm-install-version ) también es una opción. Básicamente, hace lo que hacen algunas de las otras soluciones aquí (técnicamente hablando) pero es bastante sencillo de usar. Los módulos instalados con un número de versión (parámetro de comando estándar @version utilizado por NPM) se instalan de manera predecible en una subcarpeta debajo de node_modules con ese nombre. También puede controlar el directorio de destino por módulo, lo cual es útil con los sistemas de compilación.
Fragmento de código de uso de GitHub Docs:
fuente
install-npm-version
( https://github.com/scott-lin/install-npm-version ) es otra opción. Se puede usar en la línea de comandos o mediante una interfaz programática, escrita en TypeScript para el desarrollo moderno.Ejemplo n. ° 1: instalar en el directorio versionado (predeterminado)
Ejemplo # 2: instalar en un directorio personalizado
Ejemplo n. ° 3: instalación con salida estándar silenciosa o ruidosa
Ejemplo n. ° 4: sobrescribir una instalación existente
fuente
En mi caso, necesitaba instalar una versión anterior de create-react-app que la versión que había instalado globalmente, porque estaba tomando un curso que requería esta versión anterior para las asignaciones.
Creé una nueva carpeta solo para contener esta versión anterior, hice un cd en ella e hice un
Después de configurar este shell package.json, instalé la versión exacta de create-react-app que necesitaba
que creó una carpeta local node_modules con la versión anterior de create-react-app.
Luego creé un script bash simple (create-react-app.sh) como acceso directo a esta versión anterior, y usé la variable bash "$ @" para reenviar todos los argumentos:
Finalmente, hice este simple script bash ejecutable
Entonces, ejecutar directamente este script bash ejecutará la versión anterior de create-react-app:
fuente