Saltar al contenido

¿Forzar la instalación de hilo en lugar de la instalación de npm para el módulo Node?

Hacemos una verificación profunda cada escritos en nuestra página web con el objetivo de mostrarte en todo momento la información más veraz y actual.

Solución:

ACTUALIZAR: La respuesta de Alexander es la mejor solución y usa la misma técnica que describo aquí. Dejo mi respuesta intacta para la posteridad. El punto original de mi respuesta fue mostrar que puede ejecutar un script de nodo pequeño que debería funcionar en todas las plataformas.

En su secuencia de comandos de preinstalación, puede ejecutar una secuencia de comandos de mini nodo que debería funcionar en todas las plataformas, mientras que cosas como pgrep (y otros comandos y operadores *nix comunes) no funcionarán en Windows hasta que Windows 10 haya recibido una adopción generalizada.

Probé el siguiente script en Node v4.7.0 (npm v2.15.11) y Node v7.2.1 (npm v3.10.10). Supongo que funciona en todo lo demás. Funciona al verificar las variables de entorno en el proceso que se está ejecutando actualmente: el npm_execpath es la ruta al script “npm” que se está ejecutando actualmente. En el caso del hilo, debe apuntar a /path/to/yarn/on/your/machine/yarn.js.

"scripts": 
    "preinstall": "node -e "if(process.env.npm_execpath.indexOf('yarn') === -1) throw new Error('You must use Yarn to install, not NPM')""

Puede leer más sobre los scripts de npm aquí: https://docs.npmjs.com/misc/scripts

Tan lejos como el npm_execpath variable de entorno, aunque no está documentada, dudo que alguna vez cambie. Ha existido durante varios lanzamientos importantes de npm y realmente no pasa el “hay un mejor nombre para esto” prueba.

Al igual que las otras respuestas, recomendaría usar un preinstall script y comprobando su entorno. Para una solución portátil que no tendrá false-positivos si se está ejecutando otro proceso npm, usando node -e 'JS_CODE' es probablemente la mejor opción.

En ese código JS, puede verificar la ruta del administrador de paquetes usando lo siguiente:

process.env.npm_execpath

El binario de Yarn es yarn.jscomparado con npm-cli.js utilizado por NPM. Podemos usar una expresión regular como la siguiente para verificar que esto string termina con yarn.js.

/yarn.js$/

Al usar esta expresión regular, podemos estar seguros de que no coincidirá accidentalmente con algún lugar anterior en el sistema de archivos. Más probable yarn no aparecerá en la ruta del archivo, pero nunca se puede estar demasiado seguro.

He aquí un ejemplo mínimo:


  "name": "test",
  "version": "1.0.0",
  "scripts": 
    "preinstall": "node -e 'if(!/yarn\.js$/.test(process.env.npm_execpath))throw new Error("Use yarn")'"
  

Por supuesto, el usuario aún podrá eludir esta verificación editando el JSON o usando el --ignore-scripts opciones:

npm install --ignore-scripts

Después de probar estas opciones y no estar muy satisfecho, recomiendo solo permitir.

Solo agrega:


  "scripts": 
    "preinstall": "npx only-allow yarn"
  

Me gusta que proporcione un mensaje de advertencia claro e instrucciones sobre cómo instalar yarn:

captura de pantalla de la salida de error de solo permitir

Crédito a la respuesta de Adam Thomas por proporcionar el hilo que recomienda esto.

No se te olvide recomendar esta reseña si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *