Как исправить ошибку "ReferenceError: primordials is not defined" в Node.js
У меня возникла проблема при использовании Gulp. Я установил модули Node.js с помощью команды npm install
, а затем попытался запустить gulp sass-watch
в командной строке. В результате я получил следующий ответ:
[18:18:32] Requiring external module babel-register
fs.js:27
const { Math, Object, Reflect } = primordials;
^
ReferenceError: primordials is not defined
Перед запуском gulp sass-watch
я выполнил следующую команду:
npm -g install gulp-cli
Кто-нибудь сталкивался с похожей проблемой и знает, как её можно решить?
5 ответ(ов)
Чтобы установить Node.js v11.15.0, выполните следующие команды:
npm install -g n
sudo n 11.15.0
Это должно помочь решить проблему:
ReferenceError: primordials is not defined in node
Данный подход основан на ответах @Terje Norderhaug и @Tom Corelis.
Для установки Node.js версии 11.15.0 и Gulp.js версии 3.9.1 вы можете использовать следующие команды:
npm install -g n
sudo n 11.15.0
npm install gulp@^3.9.1
npm install
npm rebuild node-sass
Эти команды помогут решить проблему:
ReferenceError: primordials is not defined in node
Обратите внимание, что использование sudo
может потребоваться только в некоторых системах, в зависимости от ваших прав доступа. Если вы работаете в Windows, возможно, вам придется использовать командную строку с правами администратора.
Простое и элегантное решение
Просто выполните следующие шаги. Это прекрасно работает при выполнении команды npm install
несколько раз, установке любых других модулей или даже при публикации проекта в artifactory.
В той же директории, где находится ваш package.json
, создайте файл npm-shrinkwrap.json со следующим содержимым:
{
"dependencies": {
"graceful-fs": {
"version": "4.2.2"
}
}
}
Запустите npm install
, и не переживайте, он обновит npm-shrinkwrap.json
, добавив много содержимого. Чтобы избавиться от этих обновлений, измените опции скриптов в package.json следующим образом:
"scripts": {
"preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
"postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}
Теперь вы можете снова запустить npm install
, и ваш npm-shrinkwrap.json
останется нетронутым и будет работать всегда.
Gulp версии 3.9.1 не работает с Node v12.x.x. Если вы обновитесь до Gulp 4.0.2, вам придётся полностью изменить gulpfile.js
с использованием новой синтаксиса (series и parallel). Поэтому лучший вариант — это откатиться на Node.js версии 11.x.x (версии 11.15.0 у меня работала без проблем). Для этого просто используйте следующий код в терминале:
nvm install 11.15.0
nvm use 11.15.0 # На всякий случай, если версия 11.15.0 не была автоматически выбрана как основная.
nvm uninstall 13.1.0
npm rebuild node-sass
Это позволит вам продолжать использовать Gulp 3.9.1 без необходимости переписывать ваш gulpfile.js
.
Да, откат到 стабильной версии Node.js решил эту проблему для меня, поскольку она возникла после обновления до Node.js 12:
sudo n 10.16.0
Если у вас возникли проблемы после обновления до более новой версии, попробуйте вернуться к стабильной версии, которая работала раньше.
Как удалить модули npm в Node.js?
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Ошибка "npm WARN package.json: Нет поля repository"
Как протестировать один файл с помощью Jest?
nvm постоянно "забывает" Node.js в новой сессии терминала