Node.js: Python no encontró excepción debido a node-sass y node-gyp
De repente, en uno de mis entornos jenkins, la compilación comenzó a fallar, mientras que en la máquina local parece estar funcionando bien ya que tengo Python instalado.
A partir de los registros, pude detectar que el problema está en la dependencia interna que es node-gyp v3.5.0 de node-sass v3.8.0 cuando investigué visitando esto sobre node-gyp y encontré el requisito previo de que se debe instalar Python. .
Entonces mi pregunta es qué versión de node-sass puedo instalar para evitar esto o hay una solución mejor ya que mi compilación funcionó bien hasta esta mañana en el mismo entorno.
Nodo v5.10.1
REGISTRO DE ERRORES
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed python2 { [Error: not found: python2] code: 'ENOENT' }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` failed Error: not found: python
gyp verb `which` failed at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed python { [Error: not found: python] code: 'ENOENT' }
gyp verb could not find "python". checking python launcher
gyp verb could not find "python". guessing location
gyp verb ensuring that file exists: C:\Python27\python.exe
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at Object.failNoPython (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:454:19)
gyp ERR! stack at Object.<anonymous> (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:480:16)
gyp ERR! stack at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:82:15)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files (x86)\\Jenkins\\jobs\\NdbSite-hot-fix-Manual-PreBuild\\workspace\\src\\NdbSite.UI\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-sass
gyp ERR! node -v v5.10.1
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok
Build failed
Cualquier idea es muy apreciada, gracias.
Entonces esto me pasó en Windows recientemente. Lo soluciono siguiendo los siguientes pasos usando PowerShell con privilegios de administrador:
- eliminar
node_modules
carpeta - ejecutándose
npm install --global windows-build-tools
con privilegio administrativo. (en mi caso necesito reiniciar, ¡y reiniciar sin preguntar!) - reinstalar módulos de nodo o node-sass con
npm install
El mensaje de error significa que no puede localizar su ejecutable o binario de Python.
En muchos casos, se instala en c:\python27. si aún no está instalado, puede instalarlo con npm install --global windows-build-tools
, que sólo funcionará si aún no se ha instalado.
Agregarlo a las variables de entorno no siempre funciona. Una mejor alternativa es simplemente configurarlo en la configuración de npm.
npm config set python "C:\Python27\python.exe"
Debe seguir los pasos a continuación para corregir el error:
1: DELETE node_modules
2: npm install node-sass@<version-as-per-below-table>
3. npm install
Cada versión de node-sass corresponde a una compilación Node.JS específica.
A continuación se muestra una guía rápida para las versiones mínimas y máximas admitidas de node-sass ( consulte las actualizaciones de la siguiente tabla aquí ):
| NodeJS | Supported node-sass version | Node Module |
|---------|-----------------------------|-------------|
| Node 20 | 9.0+ | 115 |
| Node 19 | 8.0+ | 111 |
| Node 18 | 8.0+ | 108 |
| Node 17 | 7.0+, <8.0 | 102 |
| Node 16 | 6.0+ | 93 |
| Node 15 | 5.0+ | 88 |
| Node 14 | 4.14+ | 83 |
| Node 13 | 4.13+, <5.0 | 79 |
| Node 12 | 4.12+ | 72 |
| Node 11 | 4.10+, <5.0 | 67 |
| Node 10 | 4.9+, <6.0 | 64 |
| Node 8 | 4.5.3+, <5.0 | 57 |
| Node <8 | <5.0 | <57 |
Dos opciones (diciembre 2021):
- 1 - ¡No puedes actualizar el paquete " node-sass "!
- Instale Python 2 y modifique su
.exe
nombre de archivo. - Se corrigió
PATH
el orden de los registros variables env (detalles a continuación).
- Instale Python 2 y modifique su
- 2 - Actualizar el paquete node-sass .
Condición previa
Actualizó Node.JS a la última versión (v16.13.1) en Windows 10.
Ejecuta yarn install
o npm install
en la carpeta de su proyecto y recibe un error (consulte a continuación).
Opción 1. Instalación de Python-2 y reparación PATH
del entorno
Ver instalador MSI
Después de la instalación
¡Nota! Intente reinstalar la última versión de Node.js en x86 desde x64, si aparece el siguiente error en x64. (Pero con x86 también podría recibir errores de límite de memoria).
Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (93)
Registros de Python Resort en PATH
la variable env
¡Los registros de Python 3 deben estar por encima de los registros de Python 2!
Copiar python.exe
apython2.exe
Opción 2. Actualización del node-sass
paquete
sobre package.json
archivo
Modifique package.json
y ejecute yarn install
o npm install
en la carpeta de su proyecto.
Otros archivos se actualizarán automáticamente.
Antes
Después de la actualización:
O use hilo o npm CLI para hacer lo mismo, pero puede cambiar notablemente sus .lock
archivos.
Después de actualizar, es posible que te des cuenta de que también necesitas actualizar sass-loader
, webpack
etc.
Error que puede tener (para su información)
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp ERR! stack Error: Command failed: C:\Python310\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack File "<string>", line 1
gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gyp ERR! stack SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
Mi máquina es Windows 10 , me enfrenté a problemas similares al intentar compilar SASS usando node-sass
el paquete. La versión de mi nodo es v10.16.3 y la versión de npm es 6.9.0
La forma en que resolví el problema:
- Al principio elimine
package-lock.json
el archivo ynode_modules/
la carpeta. - Abra Windows PowerShell como administrador.
- Ejecute el comando
npm i -g node-sass
. - Después de eso, vaya a la carpeta del proyecto y ejecute
npm install
- Y finalmente, ejecute el script de compilación SASS , en mi caso, es
npm run build:css
¡¡Y funciona!!