Як виправити ReferenceError: початкові набори не визначені у вузлі


363

Я встановив модулі вузлів шляхом 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

Спробували це перед глотком sass-watch

npm -g install gulp-cli

Відповіді:


463

Я потрапив у ту саму помилку. Я підозрюю, що ви використовуєте вузол 12 та gulp 3. Ця комбінація не працює: https://github.com/gulpjs/gulp/isissue/2324

Попереднє рішення січня також не працює: https://github.com/gulpjs/gulp/isissue/2246

Рішення: або оновлення до gulp 4, або повернення до попереднього вузла.


20
Зустрівши ту ж проблему з Хаосом. Зниження рівня вузла до v11.15.0 зробило трюк.
Terje Norderhaug

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 , хоча це прийняте рішення.
Ерік Хансен

246

З тією ж проблемою ми стикалися під час оновлення застарілого проекту залежно від 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знову. Інші рішення дивіться нижче.

Якщо ваш проект знаходиться в активному розвитку, ви використовуєте пряжу v1

Пряжа v1 підтримує розв’язання пакета до визначеної версії . Вам потрібно додати resolutionsрозділ до свого package.json:

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

Дякую @jazd за такий спосіб вирішити проблему.

Якщо ваш проект знаходиться в активному розвитку, ви використовуєте npm

Використовуючи npm-force-resolutionsв якості сценарію перед встановлення, ви можете отримати аналогічний результат, як і в 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модуль 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 повинен поводитись так само, як пакет-lock.json. Чому вони не ведуть себе так само? Чому для усунення цього потрібен npm-shrinkwrap.json?
JordRoss

4
Це рішення ідеально підходить для даної конкретної ситуації - це дійсно має бути прийнятою відповіддю.
zerodevx

13
це має бути прийнята відповідь
jtate

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
Блискуча відповідь!
користувач1974753

2
Ідеально! Працювали для мене.
Раджа

2
Дійсно, ти врятував мені життя. Дякую.
тріада

5
npm install -gn на моїй (Windows 64) машині видає помилку: npm ERR! notsup Непідтримувана платформа для n@6.1.3.
Даріл МакКлуло

40

Виправте це за 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
Працює як шарм при виграші 10 / WSL - Дякую!
opHASnoNAME

1
відповідь, що працює як шарм
Адіій

1
Працював як шарм і в Ubuntu.
Маной - GT

1
Добре працює на Win 10 pro! Дякую :)
elhef

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
Працював для мене, повинен був виконувати всі кроки. 👍
Джейсон

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 / User / 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"
 }

я отримував цю помилку під час розгортання на heroku.

для отримання додаткової підтримки на heroku


6

Перехід на стабільний вузол до мене вирішив цю проблему, як це сталося після того, як я перейшов до рівня 12

sudo n 10.16.0


3
Якщо ви спробуєте це та отримаєте помилку: 'sudo: n: команда не знайдена', обов’язково спочатку встановіть n: 'npm install -g n'
майжеPitt

Спробував це в Windows 10 (64 біт) і отримав: - C: \ react-script-editor> npm install -gn npm ERR! код EBADPLATFORM npm ERR! notsup Непідтримувана платформа для n@6.1.0: want {"os": "! win32", "arch": "any"} (current: {"os": "win32", "arch": "x64"}) npm ERR! notsup Дійсна ОС:! Помилка win32 npm! notsup Дійсна арка: будь-яка помилка npm! notsup Фактична ОС: Помилка win32 npm! фактична арка: x64
Найджел Ціна

6

TL: DR

Gulp 3.*не працює на Node 12.*або вище. Вам доведеться понизити Node або оновити Gulp.

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

Як уже згадували інші, Gulp 3.*не підтримується у вузлі 12або вище, тому вам доведеться зменшити версію вузла до 11.*або нижче, або оновити ваш Gulp до 4.0.

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


Зниження рівня вузла

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

Встановлення версії Node на N

n 10.16.0

Версія InstallNode на NVM

nvm install 10.16.0

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


Оновлення Gulp

Як було сказано вище, це більш трудомістка задача, але може принести користь у довгостроковій перспективі. Наприклад, Node12 тепер представив нативну підтримку модулів 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була залежність із використанням Gulp3.9.* . Вимкнення цього завдання в моєму gulpfile дозволило Gulp запуститися знову.

Якщо це сталося, у вас є кілька варіантів: ви можете,

  1. Ідіть без плагіна, якщо це абсолютно не потрібно
  2. Знайдіть альтернативу,
  3. Виправити плагін

Потрібно сказати, що якщо у вас є кілька плагінів, які покладаються на більш стару версію Gulp - особливо якщо ці плагіни життєво важливі для вашої програми - саме тут може бути величезний додатковий фрагмент часу, витраченого на оновлення Gulp (отже, попередження вище).

Якщо це трапиться, найкраще просто знизити Node, принаймні, доки патчі не можуть бути видані.


4

Ця помилка через нову версію Node (12) та стару версію gulp (менше 4).

Пониження рівня вузла та інших залежностей не рекомендується. Я вирішив це, оновивши 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, вибачте.
ашилон

3

Просто виконайте ці кроки. Він прекрасно працював з npm install, що працює кілька разів, або з встановленням будь-яких інших модулів або навіть з публікацією проекту на артефакт.

У тому самому каталозі, де у вас є 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розділ "Залежності" вашого пакета.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()способи комбінування завдань замість методів масиву, які використовуються в Gulp 3, і тому ви можете або не можете зіткнутися з помилкою у вашому старому gulpfile.jsсценарії.

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

( Якщо це допомагає, залиште пальці вгору )


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

Я радий, що це допомогло. gulp-cliце утиліта командного рядка. Його гарантує правильна установка глотка Як ви можете побачити в установці глотка кроків тут: gulpjs.com/docs/en/getting-started/quick-start
Sab

2

Я вирішив цю проблему в Windows 10, видаливши вузол з Додавання або видалення програм -> Node.js

Тоді я встановив версію 11.15.0 з https://nodejs.org/download/release/v11.15.0/

Виберіть node-v11.15.0-x64.msi, якщо ваші запущені Windows 64bit.


2

Gulp випускає проблему з Nodejs версії 11 і вище. Видаліть свою поточну версію вузла та перевстановіть v10.15.1 ось посилання на цю версію. Це допомагає мені, і це також вирішить вашу проблему.

https://nodejs.org/download/release/v10.15.1/


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.js використовується для установки Node. Потім завдання npm використовується для встановлення gulp (npm install -g gulp). Потім наступне завдання Gulp запускає завдання за замовчуванням від 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

Це пов’язано з проблемою сумісності між вашою системою 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. Тож проблема полягає у витонченому пакеті-fs, нам потрібно оновлювати його. Це працює нормально 4.2.3.

Тож просто подивіться, який пакет NPM він відображає в протоколі журналів, і оновіть витончені-fs відповідно до 4.2.3.


0

Я також отримував помилку на Node 12/13 за допомогою Gulp 3, перехід на Node 11 працював.



0

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


Приклад коду був би чудовим доповненням тут.
rhand

-1

Кроки для вирішення проблеми: -

Я вирішив проблему, виконавши наступні кроки: -

  1. Встановлення NVM
  2. Встановлено lts / dubnium за допомогою команди " nvm install lts / dubnium "
  3. Використовуйте lts / dubnium за допомогою команди " nvm install lts / dubnium "

Тепер ви зможете глохнути


1
Це неточна відповідь відповіді @kevink
Z4

-1

Я пропоную вам спершу переконатися, що встановлення NPM - це не ваша проблема. Тоді ви поновлюєте версії вузлів і gulp. Я використав вузол 10.16.1 і глотком 3.9.1.

Щоб погіршити глоток, ви можете спробувати

npm install gulp@^3.9.1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.