2012-06-27 11 views
59

Supongamos que desea instalar una biblioteca lib-a que tiene dependencias dep-1 y dep-2. Si lib-a ha declarado en su paquete.json usar una versión de dep-2 que está desactualizada (digamos que no funciona en el nodo 0.8.0 que acaba de salir), pero hay una rama de dep-2 que funciona con el nodo 0.8 .0 - nombre de la rama node0.8.0.Al instalar un paquete con NPM, ¿puede decirle que use una versión diferente de una de sus dependencias?

Así que los paquetes de la ecuación son:

git://github.com/user-a/lib-a 
git://github.com/user-b/dep-1 
git://github.com/user-c/dep-2 
git://github.com/user-c/dep-2#node0.8.0 

¿Hay una manera de contar la NGP para instalar lib-a, pero el uso de dep-2#node0.8.0 en lugar de dep-2?

Con NPM puede instalar una rama específica de un proyecto como este:

npm install git://github.com/user-c/dep-2#node0.8.0 

Y si tuviera que personalizar el package.json de lib-a, se veía que utilizar dep-2#node0.8.0 así:

{ 
    "name": "lib-a", 
    "dependencies": { 
    "dep-1": ">= 1.5.0", 
    "dep-2": "git://github.com/user-c/dep-2#node0.8.0" 
    } 
} 

modificando la package.json a continuación, puede ejecutar

npm install lib-a 

e instalará el nodo 0.8.0 compatible con la rama dep-2. Pero, eso requiere que tenga acceso a la modificación de lib-a, que para mi caso específico no tengo. Técnicamente, podría fork lib-a y hacer que lo anterior cambie a package.json. Pero en mi caso concreto, lib-a es una dependencia de otra biblioteca, así que tendría que desembolsar el proyecto se hace referencia en, y sigue y sigue ...

Entonces la pregunta es, ¿hay una manera de decirle a NPM que instale lib-a y decirle que use la rama node0.8.0 de dep-2? Algo como esto:

npm install lib-a --overrides dep-2:git://github.com/user-c/dep-2#node0.8.0 

Eso sería genial. Si no es posible, sería bueno saberlo, así puedo prepararme para tener que bifurcar/personalizar la cadena de proyectos.

Respuesta

42

NPM instalar sintaxis:

npm install (with no args in a package dir) 
npm install <tarball file> 
npm install <tarball url> 
npm install <folder> 
npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact] 
npm install [@<scope>/]<name>@<tag> 
npm install [@<scope>/]<name>@<version> 
npm install [@<scope>/]<name>@<version range> 
npm i (with any of the previous argument usage) 

para que pueda elegir uno de estos métodos para instalar los módulos.

El caso de la forma más sencilla de instalar una versión específica es la siguiente:

npm install [email protected] 

más información: https://docs.npmjs.com/cli/install

+6

Parece que si instala la dependencia en primer lugar, a continuación, las otras bibliotecas que requieren esa dependencia no descargará la suya. ¡Eso resuelve el problema! ¡Gracias! –

+1

¿Es eso correcto? Probé npm -g install/path/to/my/fork-with-fix y luego npm -g install package-which-should-use-forked-dependency-with-fix y ... aún descarga la versión oficial. –

+0

Eche un vistazo al enlace 'npm'. – knownasilya

Cuestiones relacionadas