¿Es posible especificar un destino de paquete personalizado para npm install, ya sea a través de un indicador de comando o una variable de entorno?
Por defecto, las instalaciones locales de npm terminan en node_modulesel directorio actual, pero quiero que se instale en node_modulesun directorio diferente, por ejemplo vendor/node_modules. ¿Cómo puedo hacer que eso suceda?

./node_modules, quiero que npm los instale en subdirectorios de./vendor/node_modules. (O que le digan que eso no es configurable.)required) pero no quiero instalarlo globalmente.Respuestas:
TL; DR
Puede hacerlo utilizando la
--prefixbandera y la--globalbandera *.* Aunque se trata de una instalación "global", los contenedores instalados no serán accesibles a través de la línea de comandos a menos que
~/foo/vendor/node_modulesexista enPATH.TL; R
Cada atributo configurable de
npmse puede establecer en cualquiera de los seis lugares diferentes. En orden de prioridad:--prefix ./vendor/node_modulesNPM_CONFIG_PREFIX=./vendor/node_modules$HOME/.npmrcouserconfigparam$PREFIX/etc/npmrcouserconfigparampath/to/npm/itself/npmrcPor defecto, los paquetes instalados localmente entran
./node_modules. los globales van a laprefixvariable de configuración (/usr/localpor defecto).Puede ejecutar
npm config listpara ver su configuración actual ynpm config editcambiarla.PD
En general,
npmla documentación es realmente útil. La sección de carpetas es una buena descripción estructural de npm y la sección de configuración responde a esta pregunta.fuente
./vendor/node_modules/lib/bowerusonpm#3.8.0No version provided in package.jsonbins won't be accessible through the command line. Por supuesto, el programa puede invocarse utilizando la ruta completanpm install [email protected] -g --prefix c:\my_npm` callingc: \ my_npm \ eslint --fix my.js`npm installen el directorio A con el archivo package.json, los paquetes se instalarán en el directorio B. Parece que esta solución es para paquetes individuales que se están instalando.npm installinstala dependencias localmente.npm install X -g -prefix "..."instala el módulo X en el prefijo,npm install -g -prefix "..."instala el paquete actual en el prefijo.Si desea esto en la configuración, puede configurar npm config de la siguiente manera:
o
Comprueba tu configuración con
npm config ls -lO como dice @pje y usa la
--prefixbanderafuente
npm install, aún se instalará localmente,./node_modulesperonpm install -gse instalará en"$(pwd)/vendor/node_modules". Me imagino la configuración y luego me olvido de eso, volviendo más tarde preguntándome por qué mis paquetes globales están actuando de manera extraña.Para OSX, puede ir a su usuario
$HOME(probablemente / Users / yourname /) y, si aún no existe, crear un.npmrcarchivo (un archivo que npm usa para la configuración del usuario) y crear un directorio para que sus paquetes npm instalarse en (por ejemplo, / Users / yourname / npm). En ese archivo .npmrc, establezca "prefijo" en su nuevo directorio npm, que será donde se instalarán los paquetes npm instalados "globalmente"; estos paquetes "globales", obviamente, estarán disponibles solo para su cuenta de usuario.En .npmrc:
prefix=${HOME}/npmLuego ejecute este comando desde la línea de comando:
npm config ls -lDebería dar salida tanto en su propia configuración local como en la configuración global npm, y debería ver reflejada su configuración de prefijo local, probablemente cerca de la parte superior de la larga lista de salida.
Por seguridad, recomiendo este enfoque para configurar el comportamiento de npm de su cuenta de usuario en lugar de compartir sus
/usr/localcarpetas, lo que he visto recomendado en otros lugares.fuente
En Windows 7, por ejemplo, se podría usar el siguiente conjunto de comandos / operaciones.
Cree una variable de entorno personal, las barras diagonales inversas son obligatorias:
%NPM_HOME%C:\\SomeFolder\\SubFolder\\Ahora, configure los valores de configuración en las nuevas carpetas (nombres de archivo ejemplares):
npm config set prefix "%NPM_HOME%\\npm"npm config set cache "%NPM_HOME%\\npm-cache"npm config set tmp "%NPM_HOME%\\temp"Opcionalmente, puede purgar el contenido de las carpetas originales antes de cambiar la configuración.
Eliminar el npm-cache
npm cache clearListar los módulos npm
npm -g lsEliminar los módulos npm
npm -g rm name_of_package1 name_of_package2fuente
Después de buscar esto yo mismo queriendo que varios proyectos con dependencias compartidas fueran SECOS, encontré:
require()require()binyman$PATHnpm link( info ) le permite usar una instalación local como fuente para globales→ adhiérase al Nodo e instálelo localmente
árbitro:
fuente