Usando npm podemos instalar los módulos globalmente usando la -gopció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.ioinstalarme globalmente, el resto deben instalarse localmente. ¿Hay una opción para esto?

"preferGlobal": truedentro 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
devDependenciessección de su package.json. Cada vez que usa algo descriptspackage.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
npmdonde se requiere la instalación del paquete Node globalsudo. Una opción es cambiar sunpmconfiguración para que esto no sea necesario:npm config set prefix ~/npm, agregue $ HOME / npm / bin a $ PATH agregandoexport PATH=$HOME/npm/bin:$PATHa 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 installnpm list module -g || npm install module -gya que npm devolverá los valores de salida adecuados."preinstall" : "scripts/preinstall.sh").&&, por ejemplonpm install -g bower && npm install -g grunt-cliDebido 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-execalias 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:
sudoDesventajas
$(npm bin)No funcionará en Windows.npm bincarpeta. (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
.bashrcañadir fácilmente elbin/directorio a laPATHvariable de entorno:alias nodebin='export PATH=$(npm bin)/:$PATH'. Ejecutenodebiny 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.jsscript actualizado anterior se ha modificado de la siguiente manera:La "versión"
var packagesdel paquete ahora es el valor del "paquete" pasadonpm installen 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.jsonencapsule estas herramientas y dependencias juntas es muy preferido.Pero hoy en día encuentro que siempre estoy instalandocreate-react-appy 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