Mientras trabajaba en un proyecto que usaba gulp en mi entorno, noté que el mismo proyecto que estaba funcionando bastante bien en el entorno de otros amigos en la oficina, no estaba funcionando en el mío. Estaba lanzando la excepción mencionada, Error de referencia: primordials is not defined.
Parece que gulp v3 tiene problemas cuando se ejecuta en un entorno Node.js 12, porque una de las dependencias, especificamente, graceful-fs (un reemplazo directo para el módulo fs, que realiza varias mejoras), no es compatible con esta versión de Node. Entonces, las opciones para resolver el problema eran claras:
- O actualizas a gulp v4 (modificando tu código fuente, gastando quizas mucho tiempo).
- Retroceder específicamente la versión de graceful-fs en tu proyecto.
Como no podemos simplemente reescribir el código ya que no sería rentable para nosotros, la solución fue simplemente forzar nuestro proyecto a instalar la versión 4.2.2 específica de graceful-fs. Eso es lo que aprenderás a hacer el dia de hoy en este artículo.
1. Eliminar node_modules
Como primer paso, deberás eliminar todas las dependencias que ya hayas instalado, porque si intentas ejecutar npm install
, las mismas dependencias se mantendrán con la misma versión, pero nuestra solución obliga a degradar graceful-fs a una version anterior. Entonces, simplemente elimina el directorio node_modules
y su contenido.
2. Cree npm-shrinkwrap.json
Después de eliminar el directorio de dependencias, procede a crear el siguiente archivo, especificamente, el archivo npm-shrinkwrap.json
con el siguiente contenido en el mismo directorio de su proyecto (donde package.json
se encuentra):
{
"dependencies": {
"graceful-fs": {
"version": "4.2.2"
}
}
}
Puedes encontrar una descripción detallada sobre este archivo en la documentación oficial de NPM aquí.
3. Instalar dependencias
Después de crear el archivo del paso # 2, procede a instalar una vez más las dependencias de tu proyecto con npm:
npm install
Esto iniciará la instalación de las dependencias y npm te advertirá sobre la versión de archivo de bloqueo del archivo shrinkwrap:
Esto también modificará el archivo npm-shrinkwrap.json
archivo creado previamente con mucho contenido como este:
{
"name": "yourproject_name",
"version": "x.x.x",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
// .. //
"@gulp-sourcemaps/identity-map": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
"integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
"dev": true,
"requires": {
"acorn": "^5.0.3",
"css": "^2.2.1",
"normalize-path": "^2.1.1",
"source-map": "^0.6.0",
"through2": "^2.0.3"
}
}
// .. //
}
}
Puedes ignorar esto por el momento. Después de instalar las dependencias, todo debería funcionar como se esperaba y la compilación debería tener éxito como de costumbre:
gulp build --production
Que te diviertas ❤️!
Conviertete en un programador más sociable