Mensaje de error "error:0308010C:rutinas de sobre digital::no admitidas"
Creé el proyecto IntelliJ IDEA React predeterminado y obtuve esto:
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at module.exports (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:471:10)
at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:503:5
at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:358:12
at /Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
/Users/user/Programming Documents/WebServer/untitled/node_modules/react-scripts/scripts/start.js:19
throw err;
^
Parece ser un problema reciente: webpack encontró esto hace 4 días y todavía está trabajando en ello .
Puedes probar uno de estos:
1. Baje a Node.js v16.
Puede reinstalar la versión LTS actual desde el sitio web de Node.js.
También puedes usar
nvm
. Para Windows, utilicenvm-windows
.
2. Habilite el proveedor OpenSSL heredado.
En sistemas tipo Unix (Linux, macOS, Git bash, etc.):
export NODE_OPTIONS=--openssl-legacy-provider
En el símbolo del sistema de Windows:
set NODE_OPTIONS=--openssl-legacy-provider
En PowerShell:
$env:NODE_OPTIONS = "--openssl-legacy-provider"
Referencia
Peligro
Esta pregunta tiene más de 30 respuestas, la mayoría sugiere degradar Node.js a una versión anterior a v17 o utilizar el proveedor SSL heredado. Ambas soluciones son trucos que dejan sus compilaciones expuestas a amenazas de seguridad .
Motivo del error
En Node.js v17, los desarrolladores de Node.js cerraron un agujero de seguridad en el proveedor SSL. Esta solución fue un cambio importante que se correspondía con cambios importantes similares en los paquetes SSL en NPM. Cuando intente utilizar SSL en Node.js v17 o posterior sin actualizar también esos paquetes SSL en su archivo package.json
, verá este error.
La solución correcta (segura) (para usuarios de npm)
Utilice una versión actualizada de Node.js y también utilice paquetes que estén actualizados con correcciones de seguridad.
Para muchas personas, el siguiente comando solucionará el problema:
npm audit fix --force
Sin embargo, tenga en cuenta que, para compilaciones complejas, el comando anterior generará correcciones de seguridad que potencialmente pueden dañar su compilación.
Nota para usuarios de Yarn
Los usuarios de Yarn pueden usar Yarn-audit-fix que se puede ejecutar sin instalarlo como una dependencia a través de
npm_config_yes=true npx yarn-audit-fix
o powershell de windows:
$env:npm_config_yes = 1; npx yarn-audit-fix
Una solución menos dura (también correcta) para Webpack
En la configuración de su paquete Web, configure cualquiera de los siguientes: (consulte los documentos de ouput.hashFunction )
A. (Webpack v5) Establecer output.hashFunction = 'xxhash64'
.
B. (Webpack v4) Esto dependerá de qué algoritmos hash admita nodejs en su sistema . Algunas opciones comunes que puedes probar son output.hashFunction = 'sha512'
o output.hashFunction = 'sha256'
.
Vea más información en la respuesta de Greg .