Usando npm podemos instalar los módulos globalmente usando la -g
opción. ¿Cómo podemos hacer esto en el archivo package.json?
Supongamos que estas son mis dependencias en el archivo package.json
"dependencies": {
"mongoose": "1.4.0",
"node.io" : "0.3.3",
"jquery" : "1.5.1",
"jsdom" : "0.2.0",
"cron" : "0.1.2"
}
Cuando ejecuto npm install
, solo quiero node.io
instalarme globalmente, el resto deben instalarse localmente. ¿Hay una opción para esto?
"preferGlobal": true
dentro de package.json para un módulo."preferGlobal":true
... Realmente no sé dónde poner esto en package.json. npmjs.org/doc/json.html La documentación de NPM dice que preferGlobal es para su propio paquete y que su configuración lo hará instalar su propio paquete como global. Sin embargo, parece más una guía.Respuestas:
Nueva Nota: Probablemente no quieras o necesites hacer esto. Lo que probablemente quiera hacer es poner esos tipos de dependencias de comandos para compilación / prueba, etc. en la
devDependencies
sección de su package.json. Cada vez que usa algo descripts
package.json, sus comandos devDependencies (en node_modules / .bin) actúan como si estuvieran en su ruta.Por ejemplo:
Luego en package.json:
Luego, en el símbolo del sistema, puede ejecutar:
Pero si realmente desea realizar una instalación global, puede agregar una preinstalación en la sección de secuencias de comandos de package.json:
Así que en realidad mi instalación npm ejecuta la instalación npm nuevamente ... lo cual es extraño pero parece funcionar.
Nota: es posible que tenga problemas si está utilizando la configuración más común para
npm
donde se requiere la instalación del paquete Node globalsudo
. Una opción es cambiar sunpm
configuración para que esto no sea necesario:npm config set prefix ~/npm
, agregue $ HOME / npm / bin a $ PATH agregandoexport PATH=$HOME/npm/bin:$PATH
a su~/.bashrc
.fuente
npm i -g underscore-cli
. da una advertencia sobre wd estar equivocado. wd significa directorio de trabajo, supongo. cuando hago esto manualmente en la línea de comando, entonces las cosas van bien, sin embargo, preferiría que el usuario pudiera lidiar con la instalación de mi código con un simplenpm install
npm list module -g || npm install module -g
ya que npm devolverá los valores de salida adecuados."preinstall" : "scripts/preinstall.sh"
).&&
, por ejemplonpm install -g bower && npm install -g grunt-cli
Debido a las desventajas descritas a continuación, recomendaría seguir la respuesta aceptada:
Mi respuesta original pero no recomendada sigue.
En lugar de utilizar una instalación global, puede agregar el paquete a su
devDependencies
(--save-dev
) y luego ejecutar el binario desde cualquier lugar dentro de su proyecto:En tu caso:
Este ingeniero proporcionó un
npm-exec
alias como acceso directo. Este ingeniero usa un shellscript llamadoenv.sh
. Pero prefiero usar$(npm bin)
directamente, para evitar cualquier archivo adicional o configuración.Aunque hace que cada llamada sea un poco más grande, debería funcionar , evitando:
sudo
Desventajas
$(npm bin)
No funcionará en Windows.npm bin
carpeta. (Instale npm-run o npm-which para encontrarlos).Parece que una mejor solución es colocar tareas comunes (como construir y minificar) en la sección "scripts" de su
package.json
, como lo demuestra Jason anteriormente.fuente
.bashrc
añadir fácilmente elbin/
directorio a laPATH
variable de entorno:alias nodebin='export PATH=$(npm bin)/:$PATH'
. Ejecutenodebin
y luego simplemente puede escribir sus comandos como de costumbre.Esto es un poco viejo, pero me encontré con el requisito, así que aquí está la solución que se me ocurrió.
El problema:
Nuestro equipo de desarrollo mantiene muchos productos de aplicaciones web .NET que estamos migrando a AngularJS / Bootstrap. VS2010 no se presta fácilmente a procesos de compilación personalizados y mis desarrolladores están trabajando rutinariamente en múltiples versiones de nuestros productos. Nuestro VCS es Subversion (lo sé, lo sé. Estoy tratando de mudarme a Git pero mi molesto personal de marketing es muy exigente) y una única solución VS incluirá varios proyectos separados. Necesitaba que mi personal tuviera un método común para inicializar su entorno de desarrollo sin tener que instalar los mismos paquetes Node (trago, bower, etc.) varias veces en la misma máquina.
TL; DR:
Necesita "npm install" para instalar el entorno de desarrollo global Node / Bower, así como todos los paquetes necesarios localmente para un producto .NET.
Los paquetes globales deben instalarse solo si aún no están instalados.
Los enlaces locales a paquetes globales deben crearse automáticamente.
La solución:
Ya tenemos un marco de desarrollo común compartido por todos los desarrolladores y todos los productos, así que creé un script NodeJS para instalar los paquetes globales cuando sea necesario y crear los enlaces locales. El script reside en ".... \ SharedFiles" en relación con la carpeta base del producto:
Ahora, si quiero actualizar una herramienta global para nuestros desarrolladores, actualizo el objeto "paquetes" y verifico el nuevo script. Mis desarrolladores lo comprueban y lo ejecutan con "node npm-setup.js" o con "npm install" desde cualquiera de los productos en desarrollo para actualizar el entorno global. Todo toma 5 minutos.
Además, para configurar el entorno para un nuevo desarrollador, primero deben instalar NodeJS y GIT para Windows, reiniciar su computadora, revisar la carpeta "Archivos compartidos" y cualquier producto en desarrollo, y comenzar a trabajar.
El "package.json" para el producto .NET llama a este script antes de la instalación:
Notas
Tenga en cuenta que la referencia del script requiere barras diagonales incluso en un entorno Windows.
"npm ls" dará "npm ERR! extraño": mensajes para todos los paquetes vinculados localmente porque no están listados en las "dependencias" "package.json".
Editar 29/01/16
El
npm-setup.js
script actualizado anterior se ha modificado de la siguiente manera:La "versión"
var packages
del paquete ahora es el valor del "paquete" pasadonpm install
en la línea de comando. Esto se cambió para permitir la instalación de paquetes desde otro lugar que no sea el repositorio registrado.Si el paquete ya está instalado pero no es el solicitado, se elimina el paquete existente y se instala el correcto.
Por razones desconocidas, npm arrojará periódicamente un error EBUSY (-4082) al realizar una instalación o enlace. Este error queda atrapado y el comando se vuelve a ejecutar. El error rara vez ocurre por segunda vez y parece que siempre desaparece.
fuente
Puede usar un archivo separado, como
npm_globals.txt
, en lugar depackage.json
. Este archivo contendría cada módulo en una nueva línea como esta,Luego, en la línea de comando,
Compruebe que se instalaron correctamente con
En cuanto a si debe hacer esto o no, creo que todo depende del caso de uso. Para la mayoría de los proyectos, esto no es necesario; y hacer que su proyecto
package.json
encapsule estas herramientas y dependencias juntas es muy preferido.Pero hoy en día encuentro que siempre estoy instalandocreate-react-app
y otras CLI a nivel mundial cuando me subo a una nueva máquina. Es bueno tener una manera fácil de instalar una herramienta global y sus dependencias cuando el control de versiones no importa mucho.Y hoy en día, estoy usando
npx
, un corredor paquete de NPM , en lugar de instalar los paquetes a nivel mundial.fuente
Todos los módulos de package.json están instalados en ./node_modules/
No pude encontrar esto explícitamente indicado, pero esta es la referencia de package.json para NPM .
fuente
Cree su propio script para instalar dependencias globales. No toma mucho. package.json es bastante ampliable.
Usando lo anterior, ¡incluso puede hacerlo en línea, a continuación!
Mira la preinstalación a continuación:
Los autores del nodo pueden no admitir package.json es un archivo de proyecto. Pero es.
fuente