Как исправить ReferenceError: первичные не определены в узле


368

Я установил модули узлов с помощью 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

Пробовал это перед глотком сасс-часы

npm -g install gulp-cli

Ответы:


470

Я попал в ту же ошибку. Я подозреваю, что вы используете узел 12 и gulp 3. Эта комбинация не работает: https://github.com/gulpjs/gulp/issues/2324

Предыдущий обходной путь от января также не работает: https://github.com/gulpjs/gulp/issues/2246

Решение. Обновите систему до gulp 4 или перейдите на более ранний узел.


20
Столкнулся с той же проблемой с Хаосом. Понижение узла до v11.15.0 сделало свое дело.
Терье Нордерхауг

4
Подобная проблема здесь, используя webshotпакет узла. Я подозреваю, что они должны обновить что-то на своем конце, прежде чем я смогу перейти к Node v12.
Джейкоб Моррисон

69
Я использую Node v12.1.0и Gulp, gulp@4.0.2но он не работает
Most Wanted

32
Я попробовал с узлом v10.xи глотком v3.x, затем волшебство довелось
kuldipem

12
Я бы рекомендовал использовать решение npm-shrinkwrap.json, опубликованное Валентином: stackoverflow.com/a/58394828/2726785 , хотя это и является приемлемым решением.
Эрик Хансен

249

Мы столкнулись с той же проблемой при обновлении устаревшего проекта в зависимости от gulp@3.9.1Node.js 12.

Эти исправления позволяют использовать Node.js 12 с gulp@3.9.1переопределением graceful-fsверсии 4.2.3.

Если ваш проект активно не разрабатывается и вы используете npm

Создайте npm-shrinkwrap.jsonфайл, содержащий это:

{
  "dependencies": {
    "graceful-fs": {
      "version": "4.2.3"
    }
  }
}

Зафиксируйте этот npm-shrinkwrap.jsonфайл. И затем выполните, npm installкоторый обновит npm-shrinkwrap.jsonфайл.

К сожалению, это решение больше не работает, если вы npm installснова. Смотрите другие решения ниже.

Если ваш проект находится в активной разработке и вы используете Yarn v1

Yarn v1 поддерживает преобразование пакета в определенную версию . Вам необходимо добавить resolutionsраздел в ваш package.json:

{
  // Your current package.json contents
  "resolutions": {
    "graceful-fs": "4.2.3"
  }
}

Спасибо @jazd за этот способ решить проблему.

Если ваш проект находится в активной разработке и вы используете npm

Используя npm-force-resolutionsв качестве сценария предварительной установки, вы можете получить аналогичный результат, как с Yarn v1. Вам нужно изменить ваш package.json следующим образом:

{
  // Your current package.json
  "scripts": {
    // Your current package.json scripts
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "4.2.3"
  }
}

npm-force-resolutionsперед изменением package-lock.jsonфайла изменится graceful-fsна желаемую версию install.

Если вы используете пользовательский .npmrcфайл в своем проекте, и он содержит прокси-сервер или пользовательский реестр, вам нужно перейти npx npm-force-resolutionsна него, npx --userconfig .npmrc npm-force-resolutionsпоскольку npxна данный момент .npmrcфайл текущей папки по умолчанию не используется.

Происхождение проблемы

Эта проблема связана с тем, что gulp@3.9.1 зависит от того, graceful-fs@^3.0.0какой fsмодуль monkeypatches Node.js.

Раньше он работал с Node.js до версии 11.15 (которая является версией из ветки разработки и не должна использоваться в производстве).

graceful-fs@^4.0.0больше не поддерживает Monkeypatch Node.js fs, что делает его совместимым с Node.js> 11.15.

Обратите внимание, что это не постоянное решение, но оно помогает, когда у вас нет времени на обновление gulp@^4.0.0.


6
Вау - это здорово! Мне не хотелось откатывать установку моего узла, так что это идеальное решение.
КГВР

@Valentin это сработало для меня, но как это сработало? Из того, что я прочитал, кроме того, что он доступен для публикации, npm-shrinkwrap.json должен вести себя так же, как package-lock.json. Почему они не ведут себя так же здесь? Зачем нужен npm-shrinkwrap.json, чтобы это исправить?
JordRoss

4
Это решение идеально подходит для данной конкретной ситуации - это действительно должен быть принятый ответ.
zerodevx

14
это должен быть принятый ответ
Jate

1
@Valentin, когда я запускаю npm installдля регенерации package-lock.jsonили npm-shrinkwrap.json, кажется, не удалось заблокировать эти зависимости. После перезапуска npm install --no-saveсгенерированный по- package-lock.jsonпрежнему указывает npm для установки отсутствующих зависимостей.
PuiMan Cheui

95

Используйте следующие команды и установите узел v11.15.0 :

npm install -g n

sudo n 11.15.0

будет решать

ReferenceError: первичные значения не определены в узле

По рекомендации @Terje Norderhaug @Tom Corelis отвечает.


3
Работал на меня! Отличный ответ. Я пытался понять это часами.
GlennFriesen

3
Блестящий ответ!
user1974753

2
Отлично! Работал на меня.
Раджа

2
На самом деле, ты спас мне жизнь. Спасибо.
trjade

6
npm install -gn на моей машине (windows 64) выдает ошибку: npm ERR! notsup Неподдерживаемая платформа для n@6.1.3: wanted {"os": "! win32", "arch": "any"} (текущий: {"os": "win32", "arch": "x64"})
Дэрил МакКаллоу

45

Исправить это за 1 минуту:

Просто следуйте этим шагам . Я на Windows 10, и это отлично сработало для меня!

  1. В той же директории, где у вас есть, package.jsonсоздайте npm-shrinkwrap.jsonфайл со следующим содержимым:
    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
  1. Запустите npm install, и не волнуйтесь, он будет обновляться npm-shrinkwrap.jsonс кучей контента.

  2. Запустите, gulpчтобы начать проект.


1
Работает как шарм под win 10 / WSL - Спасибо!
opHASnoNAME

1
ответ, который работает как шарм
Adiii

1
Работал как шарм в Ubuntu.
Маной - GT

1
Хорошо работает на Win 10 Pro! Спасибо :)
Эльхеф

1
Большой! Я пытался запустить проект FilterBlend, но получил эту чертову ошибку. После обновления до gulp 4 я получил другую ошибку (gulp.hasTask не является функцией). Создание этого файла обошло проблему.
Деннис Кассель

27

Используйте следующие команды для установки node v11.15.0и gulp v3.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

1
Работал на меня, должен был выполнить все шаги. J
Джейсон

1
Пожалуйста, не используйте короткую ветку NodeJS (все нечетные номера версий, такие как 9 и 11), используйте NodeJS 10.
Даниэль Руф,

работал для меня, спасибо
Kapil soni

Серьезно, выполните все шаги.
Эле

Первая команда завершается ошибкой с EBADPLATFORM в Windows.
Ронан Пайшау

22

Использование NVM для управления используемой версией узла, выполнение следующих команд помогло мне:

$ cd /to/your/project/
$ nvm install lts/dubnium
$ nvm use lts/dubnium
$ yarn upgrade # or `npm install`

3
Я всегда возвращаюсь к этому.
снег

3
Пожалуйста, не используйте короткую ветвь NodeJS (все нечетные номера версий, такие как 9 и 11), используйте NodeJS 10. Также используйте 10вместо кодового имени.
Даниэль Руф

1
Для Windows используйте nvm-windows .
Люпа

12

Gulp 3.9.1 не работает с Node v12.xx, и если вы обновитесь до Gulp 4.0.2, вам придется полностью изменить gulpfile.js с новым синтаксисом (Series & Parallels). Поэтому лучше всего перейти на Node V 11.xx, 11.15.0 работал для меня нормально. Просто используя следующий код в терминале:

nvm install 11.15.0

nvm use 11.15.0 #just in case it didn't automatically select the 11.15.0 as the main node.

nvm uninstall 13.1.0

npm rebuild node-sass

Ура!


После этого я получаю сообщение об ошибке: "/ c / Users / Пользователь / AppData / Roaming / npm / node: строка 8: C: \ Users \ User \ AppData \ Roaming \ npm / node_modules / node / bin / node: такого файла нет или справочник »
Иван Топич

11

была такая же ошибка и , наконец , исправить , что при обновлении всех пакетов , а затем упомянул ту же версию узла двигателя и НПМ версию в package.jsonкак в моей локальной рабочей системы.

 "engines": {
    "node": "10.15.3",
    "npm": "6.9.0"
 }

я получал эту ошибку при развертывании на героку.

для дополнительной проверки поддержки героку


6

Понижение до стабильного узла исправило эту проблему для меня, как это произошло после того, как я обновился до узла 12

sudo n 10.16.0


3
Если вы попробуете это и получите ошибку: 'sudo: n: команда не найдена', убедитесь, что nсначала установили с: 'npm install -g n'
NearPitt

Попробовал это на Windows 10 (64 бит) и получил: - C: \ реагировать-скрипт-редактор> npm установить -gn npm ERR! код EBADPLATFORM npm ERR! notsup Неподдерживаемая платформа для n@6.1.0: wanted {"os": "! win32", "arch": "any"} (текущий: {"os": "win32", "arch": "x64"}) нпм ERR! notsup Действительная ОС:! win32 npm ERR! действительная арка notsup: любая ошибка npm! notsup Актуальная ОС: win32 npm ERR! notsup Актуальная арка: x64
Найджел Прайс

6

TL: DR

Gulp 3.*не работает на узле 12.*или выше. Вы должны понизить Node или обновить Gulp.

Если у вас мало времени, понизьте Node до версии v11. * Или ниже; если вам нужны более новые функции, и у вас есть время, чтобы по возможности исправить загрузку сломанных зависимостей, обновите Gulp до версии 4. * или выше!

Как уже упоминали другие, Gulp 3.*не поддерживается на Node 12или выше, поэтому вам придется понизить версию своего Node до 11.*или ниже, ИЛИ обновить Gulp до 4.0.

В конечном счете, лучший вариант зависит от того, сколько у вас есть времени, поскольку обновление Gulp дает преимущества более чистых файлов gulp и встроенного контроля над выполнением задач, выполняемых последовательно или параллельно , но также полагается на то, что вы переписываете свой gulpfile в новый синтаксис, и может (читай: вероятно будет - см. конец этого комментария) может вызвать конфликты с некоторыми зависимостями.


Понижение Узла

Это самый простой и быстрый вариант. Особенно, если вы используете n или nvm , поскольку они позволяют очень быстро установить и переключаться между версиями Node.

Установка версии Node на N

n 10.16.0

Установка версии узла на NVM

nvm install 10.16.0

После того, как вы это сделали, вам может понадобиться перестроить ваши зависимости npm или, в качестве альтернативы, удалить и вашу node_modulesпапку, и ваш package-lock.jsonфайл, и переустановить ваши зависимости. Хотя, если вы просто возвращаетесь к уже существующей версии Node, у вас, вероятно, все будет хорошо.


Обновление Gulp

Как упоминалось выше, это более трудоемкая задача, но она может принести выгоды в долгосрочной перспективе. Например, Node 12теперь представил встроенную поддержку модулей ES (за экспериментальным флагом) и полную поддержку в Node 13.

Возможно, вам придется обновить Node, чтобы использовать это, заставляя вас обновить Gulp. Или вы можете просто захотеть воспользоваться преимуществами Gulp 4, так как он предлагает лучший и более эффективный контроль над задачами написания.

Об этом уже есть ряд статей, поэтому я не буду более подробно останавливаться на деталях, но повторюсь - это не простая работа . В зависимости от размера вашего проекта, может потребоваться заметное переписывание, и у вас могут быть зависимости, которые нарушаются. Если у вас не хватает времени, вы должны просто понизить рейтинг узла, хотя бы временно.


Но у меня уже есть Gulp 4, и он все еще не работает!

Если, как и я, вы уже используете Gulp 4+ (я использовал Gulp 4.0.2, изначально на Node 10) и недавно обновили (я обновился до Node 13.8.0), если вы все еще получаете проблему, это может быть потому, что зависимость зависит от старая версия Gulp, и это попадает в конвейер.

В моем случае gulp-combine-mqбыла зависимость с использованием Gulp 3.9.*. Отключение этой задачи в моем gulpfile позволило Gulp запустить снова.

Если это произойдет, у вас есть несколько вариантов: вы можете,

  1. Обойтись без плагина, если это не является абсолютно необходимым
  2. Найти альтернативу,
  3. Исправить плагин

Само собой разумеется, если у вас есть несколько плагинов, которые используют более старую версию Gulp - особенно, если эти плагины жизненно важны для вашего приложения - это то, где может быть огромный дополнительный промежуток времени, потраченный на обновление Gulp (отсюда и предупреждения выше).

Если это произойдет, лучше всего понизить Node, по крайней мере, до тех пор, пока не будут выпущены патчи.


4

Эта ошибка вызвана новой версией Node (12) и старой версией gulp (менее 4).

Понижение версии Node и других зависимостей не рекомендуется. Я решил эту проблему, обновив package.jsonфайл, загружающий последнюю версию всех зависимостей. Для этого я использую npm-check-updates. Это модуль, который обновляет package.jsonпоследнюю версию всех зависимостей.

Ссылка : https://www.npmjs.com/package/npm-check-updates

npm i -g npm-check-updates
ncu -u
npm install

В большинстве случаев нам придется обновить gulpfile.jsтакже, как показано ниже:

Ссылка : https://fettblog.eu/gulp-4-parallel-and-series/#migration

Перед:

gulp.task(
    'sass', function () {
        return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])

            ....

    }
);

Other config...

gulp.task(
    'watch', function () {
        gulp.watch(sourcePath + '/sass/**/*.scss', ['sass']);
    }
);

После:

gulp.task('sass', gulp.series(function(done) {
    return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])

            ...

    done();
}));

Other config...

gulp.task(
    'watch', function () {
        gulp.watch(sourcePath + '/sass/**/*.scss', gulp.series('sass'));
    }
);

Отличное решение, если у вас нет сложных файлов gulp. В моем случае мне нужно было всего лишь адаптировать две строки для gulpfile.js. Спасибо за краткое руководство по миграции!
Тобиас

3

Я получал эту ошибку на Windows 10. Оказалось, что поврежденный перемещаемый профиль.

npm ERR! node v12.4.0
npm ERR! npm  v3.3.12

npm ERR! primordials is not defined
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:

Удаление C:\Users\{user}\AppData\Roaming\npmпапки устранило мою проблему.


2
Это испортило всю мою зависимость от npm, извините.
Ashilon

3

Просто следуйте этим шагам. Он отлично работал при многократной установке npm, установке любых других модулей или даже публикации проекта в артефакте.

В том же каталоге, где у вас есть 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 останется без изменений и будет работать вечно.


2

Это может произойти поздно, но для тех, кто по-прежнему заинтересован в сохранении Node v12 при использовании последней версии gulp ^ 4.0, выполните следующие действия:

Обновите интерфейс командной строки (только для предосторожности), используя:

npm i gulp-cli -g

Добавьте / обновите gulpнижний раздел зависимостей вашего package.json

"dependencies": {
  "gulp": "^4.0.0"
}

Удалить свой package-lock.jsonфайл

Удалить вашу node_modulesпапку

Наконец, запустите npm iдля обновления и воссоздания новой папки node_modules и файла package-lock.json с правильными параметрами для Gulp ^ 4.0

npm i

Примечание Gulp.js 4.0 вводит series()и parallel()методы , чтобы объединить задачи вместо методов массивов , используемых в Глоток 3, и поэтому вы можете или не может возникнуть ошибка в вашем старом gulpfile.jsскрипте.

Чтобы узнать больше о применении этих новых функций, этот сайт действительно сделал это правильно: https://www.sitepoint.com/how-to-migrate-to-gulp-4/

( Если это поможет, пожалуйста, оставьте стук вверх )


Для чего gulp-cli? Я следовал твоим шагам и заставил все работать изначально; но затем я удалил gulp-cli(так как я не видел, где это использовалось), и все все еще работало. Тем не менее, спасибо за ответ, потому что я снова работаю с node v12.9.1и Gulp 4.0.2!
MuffinTheMan

Я рад, что это помогло. gulp-cliутилита командной строки Его гарантирует правильная установка глотка Как вы можете увидеть в установке глотка шагов здесь: gulpjs.com/docs/en/getting-started/quick-start
Sab



2

Я столкнулся с той же проблемой. Что я пытался и работал для меня:

  1. Проверьте версию NODE и GULP (комбинация узла v12 и gulp меньше чем v4 не работает)

  2. Я понижаю версию NPM:

    • sudo NPM установить -gn
    • sudo n 10.16.0

Он работал нормально, а затем просто следуйте инструкциям вашей консоли.



1

Для тех, кто использует yarn.

yarn global add n
n 11.15.0
yarn install # have to install again

Пожалуйста, не используйте короткую ветку NodeJS (все нечетные номера версий, такие как 9 и 11), используйте NodeJS 10.
Даниэль Руф,

0

Для тех, кто имеет ту же ошибку по той же причине в ADOS CI Build:

Этот вопрос был первым, что я нашел, когда искал помощи. У меня есть конвейер сборки ADOS CI, где для установки Node используется первая задача установки инструмента Node.js. Затем задача npm используется для установки gulp (npm install -g gulp). Затем следующая задача Gulp запускает default-task из gulpfile.js. В этом есть что-то вроде глотка.

Когда я изменил инструмент Node.js, чтобы установить последний узел 12.x вместо старого, последняя версия gulp была 4.0.2. Результатом стала та же ошибка, что и в вопросе.

В этом случае мне помогло понизить node.js до последней версии 11.x, как уже предлагали Альфонс Р. Дсуза и Аймен Ясин. В этом случае, хотя нет необходимости использовать какие-либо предложенные ими команды, достаточно просто установить спецификацию версии установщика инструмента Node.js на последнюю версию Node от 11.x.

введите описание изображения здесь

Точная версия Node.js, которая была установлена ​​и работает, была 11.15.0. Я не должен был понизить глоток.


0

Я ударил эту ошибку после обновления моего узла до версии 12, которая не работает с Gulp 3.9.1. Что касается того, что мой gulpfile.js не был таким сложным, я решил обновить его до Gulp 4, используя эту статью. Он прошел хорошо, и это было намного проще, чем я думал.


0

У вас есть два варианта здесь

  1. Либо обновить до глотка 4 Или еще
  2. перейти на более раннюю версию узла.

0

Это потому, что проблема совместимости между nodeи gulpв вашей системе. Понижение nodeили обновление gulpисправит эту проблему.

sudo npm i -g n
sudo n 11.15.0

Попробуйте удалить node_modulesпапку и package-lock.jsonфайл и установить заново, используя npm iкоманду, если она все еще не работает.


0

Что мне помогло, так это использование python2 во время установки npm.

> npm install --python=~/venv/bin/python

0

Как мы также получаем эту ошибку, когда мы используем пакет s3 NPM. Итак, проблема в пакете graceful-fs, мы должны обновить его. Работает нормально на 4.2.3.

Так что просто посмотрите, какой пакет NPM он показывает в журналах трассировки, и обновите graceful-fs соответственно до 4.2.3.


0

Я также получал сообщение об ошибке на узле 12/13 с Gulp 3, переезд в узел 11 работал.



0

Если вы пытаетесь установить semantic-uiи возникает следующая ошибка, попробуйте загрузить последнюю версию узла js(13.5.0)с последними функциями, с Node.js.org. Более того, вместо попытки установки семантики NPM, вы просто должны добавить ссылку (которую вы можете найти от cdnjs ссылка на заголовок вашего index.htmlфайла. Удачи!


Пример кода будет отличным дополнением здесь.
Ранд

-1

Шаги, чтобы решить проблему: -

Я исправил проблему с помощью следующих шагов: -

  1. Установка NVM
  2. Установил lts / dubnium с помощью команды " nvm install lts / dubnium "
  3. Используйте команду lts / dubnium с помощью команды " nvm install lts / dubnium "

Теперь вы можете проглотить развернуть


1
Это неточный обман ответа @kevink
Z4-

-1

Я предлагаю вам сначала убедиться, что установка NPM не является вашей проблемой. Затем вы понижаете версию узла и глотка. Я использовал узел 10.16.1 и gulp 3.9.1.

Чтобы понизить свой глоток, вы можете попробовать

npm install gulp@^3.9.1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.