2 manuales sobre gulp dicen que necesito instalar gulp primero globalmente (con el indicador -g) y luego una vez más localmente. ¿Por qué necesito esto?
2 manuales sobre gulp dicen que necesito instalar gulp primero globalmente (con el indicador -g) y luego una vez más localmente. ¿Por qué necesito esto?
Respuestas:
Al instalar una herramienta globalmente, debe ser utilizada por un usuario como una utilidad de línea de comando en cualquier lugar, incluso fuera de los proyectos de nodo. Las instalaciones globales para un proyecto de nodo son malas porque dificultan la implementación.
La npx
utilidad incluida con npm
5.2
resuelve este problema. Con él puede invocar utilidades instaladas localmente como utilidades instaladas globalmente (pero debe comenzar el comando con npx
). Por ejemplo, si desea invocar a un local instalado eslint
, puede hacer:
npx eslint .
Cuando se usa en un script
campo de su package.json, npm
busca node_modules
la herramienta y los módulos instalados globalmente, por lo que la instalación local es suficiente.
Entonces, si está satisfecho con (en su package.json):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
etc. y ejecutando con, npm run test
entonces no debería necesitar la instalación global en absoluto.
Ambos métodos son útiles para que las personas configuren su proyecto, ya sudo
que no es necesario. También significa que gulp
se actualizará cuando la versión se encuentre en el paquete.json, por lo que todos usarán la misma versión de Gulp cuando desarrollen con su proyecto.
Parece que tragar tiene un comportamiento inusual cuando se usa globalmente. Cuando se usa como una instalación global, gulp busca un trago instalado localmente para pasarle el control. Por lo tanto, una instalación global de Gulp requiere una instalación local de Gulp para funcionar. Sin embargo, la respuesta anterior sigue en pie. Las instalaciones locales siempre son preferibles a las instalaciones globales.
./node_modules/.bin/gulp
.
gulp
y coffee
lo que los comandos trabajar desde mi nodo raíz del proyecto (por ejemplo. alias gulp="node_modules/.bin/gulp"
). De esta forma, los comandos son fáciles de usar si es necesario y no se producen conflictos de versión global / local.
gulp
, me da el siguiente mensaje de error Local gulp not found in ...
. Por lo que yo entiendo, primero debería mirar a los nodos locales_módulos y, si no se encuentra, debería mirar a los módulos instalados globalmente, ¿no? ¡Gracias!
TLDR; He aquí por qué :
La razón por la que esto funciona es porque
gulp
intenta ejecutar sugulpfile.js
uso de su versión instalada localmentegulp
, consulte aquí . De ahí la razón de una instalación global y local de trago.
Esencialmente, cuando instala gulp
localmente, el script no está en su PATH
archivo y, por lo tanto, no puede simplemente escribir gulp
y esperar que el shell encuentre el comando. Al instalarlo globalmente, el gulp
script ingresa a usted PATH
porque el node/bin/
directorio global probablemente se encuentre en su ruta.
Sin embargo, para respetar sus dependencias locales, gulp
usará su versión instalada localmente para ejecutar el gulpfile.js
.
gulp
paquete instalado globalmente es necesario para ponerlo node_modules/.bin/gulp
en ruta. El almacenamiento es barato, pero tirar MB para simular un enlace simbólico es un descuido IMO.
Puede vincular gulp
localmente instalado globalmente con
npm link gulp
npm link
.
La pregunta " ¿Por qué necesitamos instalar gulp a nivel mundial y local? " Se puede dividir en las siguientes dos preguntas:
¿Por qué necesito instalar Gulp localmente si ya lo he instalado globalmente?
¿Por qué necesito instalar Gulp globalmente si ya lo he instalado localmente?
Varios otros han proporcionado excelentes respuestas a estas preguntas de forma aislada, pero pensé que sería beneficioso consolidar la información en una respuesta unificada.
¿Por qué necesito instalar Gulp localmente si ya lo he instalado globalmente?
La razón para instalar Gulp localmente se compone de varias razones:
¿Por qué necesito instalar Gulp globalmente si ya lo he instalado localmente?
Para evitar la instalación local, puede usar npm link [package]
, pero el comando de enlace y el install --global
comando no parecen admitir la --save-dev
opción, lo que significa que no parece haber una manera fácil de instalar Gulp a nivel mundial y luego agregar fácilmente cualquier versión que sea su archivo package.json local.
En última instancia, creo que tiene más sentido tener la opción de usar módulos globales para evitar tener que duplicar la instalación de herramientas comunes en todos sus proyectos, especialmente en el caso de herramientas de desarrollo como grunt, gulp, jshint, etc. Desafortunadamente Parece que terminas luchando un poco contra las herramientas cuando vas contra la corriente.
Técnicamente, no necesita instalarlo globalmente si la node_modules
carpeta en su instalación local está en su PATH
. En general, esta no es una buena idea.
Alternativamente, si se trata de npm test
referencias gulp
, puede escribir npm test
y ejecutará el trago local.
Nunca he instalado gulp a nivel mundial, creo que es una mala forma.
No estoy seguro de si nuestro problema estaba directamente relacionado con la instalación de gulp solo localmente. Pero tuvimos que instalar un montón de dependencias nosotros mismos. Esto condujo a un paquete "enorme". Json y no estamos seguros de si realmente es una gran idea instalar gulp solo localmente. Tuvimos que hacerlo debido a nuestro entorno de construcción. Pero no recomendaría instalar Gulp no globalmente si no es absolutamente necesario. Nos enfrentamos a problemas similares a los descritos en la siguiente publicación de blog.
Ninguno de estos problemas surge para ninguno de nuestros desarrolladores en sus máquinas locales porque todos instalaron trago globalmente. En el sistema de compilación tuvimos los problemas descritos. Si alguien está interesado, podría profundizar en este tema. Pero en este momento solo quería mencionar que no es un camino fácil para instalar gulp solo localmente.
Solo porque no lo he visto aquí, si está en MacOS o Linux, le sugiero que agregue esto a su RUTA (en su bashrc, etc.):
node_modules/.bin
Con esta entrada de ruta relativa, si está sentado en la carpeta raíz de cualquier proyecto de nodo, puede ejecutar cualquier herramienta de línea de comando (eslint, gulp, etc., etc.) sin preocuparse por las "instalaciones globales" o npm run
etc.
Una vez que hice esto, nunca instalé un módulo a nivel mundial.