Husky 4.x+ no funciona con Visual Studio Git

3 minutos de lectura

Avatar de usuario de Nick
Mella

Fornido cambió su manejo de ruta con 4.0.0. Después de este cambio, arroja el siguiente error al confirmar de Visual Studio:

husky > pre-commit (node v12.12.0)/c/path/to/repo/node_modules/.bin/lint-staged: 
line 5: cygpath: command not foundinternal/modules/cjs/loader.js:797 throw err;

^Error: Cannot find module 'C:\lint-staged\bin\lint-staged.js' 
 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15) 
 at Function.Module._load (internal/modules/cjs/loader.js:687:27)
 at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10) 
 at internal/main /run_main_module.js:17:11 { code: 'MODULE_NOT_FOUND', requireStack: []}

husky > pre-commit hook failed 
(add --no-verify to bypass)

Sin embargo, al cometer de CLI, funciona como se esperaba. Dado que el mensaje de error tiene 'C:\lint-staged\bin\lint-staged.js' como la ruta del archivo, asumo que Visual Studio está manejando la ruta de manera diferente.

Estoy tratando de encontrar una manera de hacer que esto funcione desde Visual Studio. Estoy en un entorno empresarial, por lo que espero poder incluir esta configuración dentro del repositorio (en lugar de requerir una configuración local manual).

Tengo la configuración de husky incluida en mi paquete.json como

...
"husky":{
    "hooks":{ "pre-commit": "lint-staged"}
},
"lint-staged":{
    "!(*.min.*)js": "eslint --fix"
},
...

Actualmente estoy usando:
nvm 1.1.7 con Nodo 12.16.1
husky 4.2.5
pelusa por etapas 10.1.3
estudio visual 2019

Avatar de usuario de Nick
Mella

Encontré una solución, aunque no una explicación completa. El trabajo fácil es modificar su comando husky así:

...
"husky":{
    "hooks":{ "pre-commit": "npx lint-staged"}
},
...

Especificar el comando NPM corrige el problema con la ruta. Encontré la sugerencia en esta respuesta a un problema de 2018 en el github en etapa de pelusa, fuente aquí.

Editar: solo quería llamar la atención sobre el comentario de TetraDev. Son correctos, debes incluir git add . en las tareas preparadas de lint después de cualquier tarea de modificación de código (linting, más bonito, etc.) para que los cambios realizados se apliquen a su confirmación.

  • Funciona: este debería ser el valor predeterminado

    – Aki

    21 de noviembre de 2020 a las 8:59

  • Extraño. Solo Visual Studio requiere esto. La confirmación a través de CLI o SourceTree no requiere la anteposición de npx por alguna razón. También tenga en cuenta que Visual Studio no agrega automáticamente ningún cambio del linter al conjunto actual de cambios por etapas, así que agregue git add . hasta el final de su lista de comandos preparados para pelusa

    – TetraDev

    17 de febrero de 2021 a las 22:06


  • @TetraDev es correcto. Recibí este error con GitHub Desktop. Todo funcionó como se esperaba desde la línea cmd sin ajustar el package.json

    – Portero

    1 de septiembre de 2021 a las 0:46

  • salvó mi lunes. ¡Gracias!

    – JBoothUA

    3 ene a las 21:47

Tengo un error similar causado por el mismo gancho de confirmación previa, pero no puede encontrar yarn.js:

/c/Users/xxx/AppData/Roaming/npm/yarn: line 5: cygpath: command not found
internal/modules/cjs/loader.js:968
  throw err;
  ^

Error: Cannot find module 'C:\program files (x86)\microsoft visual studio\2019\enterprise\common7\ide\commonextensions\microsoft\teamfoundation\team explorer\Git\node_modules\yarn\bin\yarn.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
    at Function.Module._load (internal/modules/cjs/loader.js:841:27)
    at Function.executeUserEntryPoint as runMain
    at internal/main/run_main_module.js:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Desafortunadamente, esto no ayuda:

  "husky": {
    "hooks": {
      "pre-commit": "npx lint-staged"
    }
  },

Puedo resolver el problema eliminando el gancho de confirmación previa, pero quiero evitarlo.

  • Creo que debería hacer esto como su propia pregunta, probablemente no obtendrá mucha visibilidad aquí. sin embargo, encontré este que parece relacionado. Actualmente no estoy usando hilo, por lo que no he experimentado su problema de primera mano.

    – Nick

    20 dic 2020 a las 18:45

Avatar de usuario de Michael Kriese
Michael Kriese

El problema con vs 2019 es que al git integrado le falta el cygpath.exe presentar en C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin

https://developercommunity.visualstudio.com/t/Missing-cygpathexe-in-git/1393876

Avatar de usuario de Jorge Rozo
jorge rozo

Desde la consola VS, ejecute:

npm install husky --save-dev

… y cometer de nuevo.

¿Ha sido útil esta solución?