Jak naprawić błąd ReferenceError: primordials nie jest zdefiniowany w węźle


363

Zainstalowałem moduły węzłów przez npm install, a następnie próbowałem zrobić gulp sass-watch w wierszu polecenia. Potem otrzymałem poniższą odpowiedź.

[18:18:32] Requiring external module babel-register
fs.js:27
const { Math, Object, Reflect } = primordials;
                                  ^

ReferenceError: primordials is not defined

Próbowałem tego przed łykiem sass-watch

npm -g install gulp-cli

Odpowiedzi:


463

Wystąpił ten sam błąd. Podejrzewam, że używasz węzła 12 i łyka 3. Ta kombinacja nie działa: https://github.com/gulpjs/gulp/issues/2324

Poprzednie obejście od stycznia nie działa: https://github.com/gulpjs/gulp/issues/2246

Rozwiązanie: Uaktualnij do gulp 4 lub obniż do wcześniejszego węzła.


20
Wystąpił ten sam problem z Khaios. Zmniejszenie węzła do wersji 11.15.0 załatwiło sprawę.
Terje Norderhaug

4
Podobny problem tutaj przy użyciu webshotpakietu węzła. Podejrzewam, że muszą coś zaktualizować, zanim będę mógł kontynuować pracę z Node v12.
Jacob Morrison

69
Używam węzła v12.1.0i łyka, gulp@4.0.2ale to nie działa
Most Wanted

32
Próbowałem z węzłem v10.xi łykiem v3.x, a potem magia się wydarzyła
kuldipem

12
Polecam użycie rozwiązania npm-shrinkwrap.json opublikowanego przez Valentin: stackoverflow.com/a/58394828/2726785 , mimo że jest to rozwiązanie zaakceptowane.
Erik Hansen

245

Ten sam problem wystąpił podczas aktualizacji starszego projektu w zależności od wersji gulp@3.9.1Node.js 12.

Te poprawki umożliwiają używanie Node.js 12 gulp@3.9.1przez zastąpienie graceful-fswersji 4.2.3.

Jeśli Twój projekt nie jest aktywnie rozwijany i używasz npm

Utwórz npm-shrinkwrap.jsonplik zawierający to:

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

Zatwierdź ten npm-shrinkwrap.jsonplik. A następnie uruchom, npm installktóry zaktualizuje npm-shrinkwrap.jsonplik.

Niestety, to rozwiązanie nie działa, jeśli npm installznowu. Zobacz inne rozwiązania poniżej.

Jeśli Twój projekt jest w fazie rozwoju i używasz przędzy v1

Yarn v1 obsługuje rozwiązywanie pakietu do zdefiniowanej wersji . Musisz dodać resolutionssekcję do package.json:

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

Dzięki @jazd za ten sposób rozwiązania problemu.

Jeśli Twój projekt jest w fazie rozwoju i używasz npm

Używając npm-force-resolutionsjako skryptu preinstalacji, możesz uzyskać podobny wynik jak w przypadku przędzy v1. Musisz zmodyfikować plik package.json w ten sposób:

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

npm-force-resolutionszmieni package-lock.jsonplik, aby ustawić graceful-fsżądaną wersję przed zakończeniem install.

Jeśli używasz niestandardowego .npmrcpliku w swoim projekcie i zawiera on serwer proxy lub niestandardowy rejestr, musisz zmienić npx npm-force-resolutionsna, npx --userconfig .npmrc npm-force-resolutionsponieważ na razie domyślnie npxnie używa bieżącego .npmrcpliku folderu .

Geneza problemu

Ten problem wynika z faktu, który gulp@3.9.1 zależy od tego, graceful-fs@^3.0.0który fsmoduł monkeypatches Node.js.

To działało z Node.js do wersji 11.15 (która jest wersją z gałęzi programistycznej i nie powinna być używana w produkcji).

graceful-fs@^4.0.0nie monkeypatch fsmodułu Node.js , co czyni go kompatybilnym z Node.js> 11.15.

Pamiętaj, że nie jest to trwałe rozwiązanie, ale pomaga, gdy nie masz czasu na aktualizację gulp@^4.0.0.


6
Wow - to świetnie! Nie miałem ochoty wycofywać instalacji węzła, więc jest to idealne rozwiązanie.
dgo

@ Valentin to działało dla mnie, ale jak to działało? Z tego, co przeczytałem, oprócz tego, że można je opublikować, npm-shrinkwrap.json powinien zachowywać się tak samo jak pakiet-lock.json. Dlaczego nie zachowują się tak samo? Dlaczego npm-shrinkwrap.json jest potrzebny, aby to naprawić?
JordRoss,

4
To rozwiązanie jest idealne w tej konkretnej sytuacji - to naprawdę powinna być zaakceptowana odpowiedź.
zerodevx

13
to powinna być zaakceptowana odpowiedź
jtate

1
@ Valentin, gdy uruchamiam się, npm installaby zregenerować package-lock.jsonlub npm-shrinkwrap.json, wydaje się, że nie udało się zablokować tych zależności. Po ponownym uruchomieniu npm install --no-savewygenerowane package-lock.jsonnadal wskazują npm, aby zainstalować brakujące zależności.
PuiMan Cheui

95

Użyj następujących poleceń i zainstaluj węzeł v11.15.0 :

npm install -g n

sudo n 11.15.0

Rozwiąże

ReferenceError: primordials nie jest zdefiniowany w węźle

Na podstawie odpowiedzi @Terje Norderhaug @Tom Corelis.


3
Pracował dla mnie! Doskonała odpowiedź. Próbowałem to rozgryźć przez wiele godzin.
GlennFriesen

3
Genialna odpowiedź!
user1974753,

2
Doskonały! Pracował dla mnie.
Raja

2
Naprawdę uratowałeś mi życie. Dzięki.
trjade

5
npm install -gn na moim (Windows 64) komputerze powoduje błąd: npm ERR! notsup Nieobsługiwana platforma dla n@6.1.3: Wanted {"os": "! win32", "arch": "any"} (current: {"os": "win32", "arch": "x64"})
Daryl McCullough

40

Napraw to w 1 minutę:

Wystarczy wykonać następujące kroki . Jestem na Windowsie 10 i działało to dla mnie idealnie!

  1. W tym samym katalogu, w którym package.jsonutworzono npm-shrinkwrap.jsonplik o następującej treści:
    {
      "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
         }
      }
    }
  1. Uruchom npm installi nie martw się, zaktualizuje się npm-shrinkwrap.jsonz dużą ilością treści.

  2. Uruchom, gulpaby rozpocząć projekt.


1
Działa jak urok pod Win 10 / WSL - Dzięki!
opHASnoNAME

1
odpowiedź, która działa jak urok
Adiii

1
W Ubuntu również działał jak urok.
Manoj - GT

1
Działa dobrze na Win 10 pro! Dzięki :)
elhef

1
Świetny! Próbowałem uruchomić projekt FilterBlend, ale dostałem ten cholerny błąd. Po aktualizacji do gulp 4 dostałem inny błąd (gulp.hasTask nie jest funkcją). Utworzenie tego pliku rozwiązało problem.
Dennis Kassel

27

Użyj następujących poleceń, aby zainstalować node v11.15.0i 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

Rozwiązuje ten problem:

ReferenceError: primordials is not defined in node

1
Pracował dla mnie, musiałem wykonać wszystkie kroki. 👍
Jason

1
Nie używaj krótkiej gałęzi NodeJS (wszystkie nieparzyste numery wersji, takie jak 9 i 11), użyj NodeJS 10.
Daniel Ruf

pracował dla mnie dzięki
Kapil soni

Poważnie, wykonaj wszystkie kroki.
Ele

Pierwsze polecenie kończy się niepowodzeniem z EBADPLATFORM w systemie Windows.
Ronan Paixão

22

Używając NVM do zarządzania używaną wersją węzła, uruchomiłem następujące polecenia:

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

3
Zawsze do tego wracam.
śnieg

3
Nie używaj krótkiej gałęzi NodeJS (wszystkie nieparzyste numery wersji, takie jak 9 i 11), użyj NodeJS 10. Użyj również 10zamiast nazwy kodowej.
Daniel Ruf,

1
W systemie Windows użyj nvm-windows .
Lupa

12

Gulp 3.9.1 nie działa z Node v12.xx, a jeśli uaktualnisz do Gulp 4.0.2, musisz całkowicie zmienić gulpfile.js z nową składnią (Series & Parallels). Więc najlepszym rozwiązaniem jest przejście na Node V 11.xx, wersja 11.15.0 działała dla mnie dobrze. Wystarczy użyć następującego kodu w terminalu:

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

Twoje zdrowie!


Po tym pojawia się błąd: "/ c / Users / User / AppData / Roaming / npm / node: line 8: C: \ Users \ User \ AppData \ Roaming \ npm / node_modules / node / bin / node: Brak takiego pliku lub katalog ”
Ivan Topić,

11

miałem ten sam błąd i ostatecznie ustalić, że po aktualizacji wszystkie pakiety, a potem wspomniał o tej samej wersji silnika węzeł oraz wersję npm w package.jsonjak to jest w moim lokalnym układzie roboczym.

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

Otrzymałem ten błąd podczas wdrażania na Heroku.

aby uzyskać więcej informacji na temat wsparcia heroku


6

Zmiana na stabilny węzeł naprawiła dla mnie ten problem, ponieważ pojawił się po aktualizacji do węzła 12

sudo n 10.16.0


3
Jeśli spróbujesz tego i pojawi się błąd: „sudo: n: polecenie nie znaleziono”, zainstaluj nnajpierw: „npm install -g n”
AlmostPitt

Wypróbowałem to w systemie Windows 10 (wersja 64-bitowa) i uzyskałem: - C: \ reaguj-skrypt-edytor> npm install -gn npm ERR! kod EBADPLATFORM npm ERR! notsup Nieobsługiwana platforma dla n@6.1.0: Wanted {"os": "! win32", "arch": "any"} (current: {"os": "win32", "arch": "x64"}) npm ERR! notsup Ważny system operacyjny:! win32 npm ERR! notsup Valid Arch: any npm ERR! notsup Rzeczywisty system operacyjny: win32 npm ERR! notsup Actual Arch: x64
Nigel Price

6

TL: DR

Gulp 3.*nie działa na węźle 12.*lub nowszym. Musisz obniżyć poziom Węzła lub uaktualnić Gulp.

Jeśli brakuje Ci czasu, obniż węzeł do wersji 11. * Lub niższej; jeśli potrzebujesz nowszych funkcji i masz czas, aby naprawić wiele zepsutych zależności, zaktualizuj Gulp do 4. * lub nowszej!

Jak już wspomniano inni, Gulp 3.*nie jest obsługiwany w Węzle 12lub nowszym, więc będziesz musiał obniżyć wersję swojego Węzła do 11.*lub poniżej, LUB uaktualnić Gulp do 4.0.

Najlepsza opcja zależy ostatecznie od tego, ile masz czasu, ponieważ aktualizacja Gulp zapewnia korzyści z czystszych plików gulp i wbudowanej kontroli nad uruchamianiem zadań szeregowo lub równolegle , ale także zależy od tego, czy przepiszesz plik gulp do nowej składni, i może (czytaj: prawdopodobnie będzie - patrz koniec tego komentarza) powodować konflikty z niektórymi zależnościami.


Obniżenie węzła

To najłatwiejsza i najszybsza opcja. Zwłaszcza jeśli używasz n lub nvm , ponieważ pozwalają one na bardzo szybką instalację i przełączanie między wersjami węzłów.

Instalowanie wersji węzła na N

n 10.16.0

Wersja InstallingNode na NVM

nvm install 10.16.0

Po wykonaniu tej czynności może być konieczne odbudowanie zależności npm lub usunięcie zarówno node_modulesfolderu ORAZ package-lock.jsonpliku, jak i ponowne zainstalowanie zależności. Chociaż po prostu powracasz do wcześniej istniejącej wersji Węzła, prawdopodobnie powinno być w porządku.


Ulepszenie Gulp

Jak wspomniano powyżej, jest to zadanie bardziej czasochłonne, ale na dłuższą metę może przynieść korzyści. Na przykład Node 12wprowadził teraz natywną obsługę modułów ES (za flagą eksperymentalną) i pełną obsługę Node 13.

Aby go użyć, może być konieczne uaktualnienie Węzła, co zmusi Cię do uaktualnienia Gulpa. Lub możesz po prostu skorzystać z zalet korzystania z Gulp 4, ponieważ oferuje on lepszą i bardziej wydajną kontrolę nad zadaniami pisania.

Jest już wiele artykułów na ten temat, więc nie będę dalej omawiać szczegółów, ale powtarzam - to nie jest szybka praca . W zależności od wielkości projektu może być wymagane znaczące ponowne napisanie i mogą wystąpić zależności, które się psują. Jeśli brakuje Ci czasu, powinieneś po prostu obniżyć węzeł, przynajmniej tymczasowo.


Ale mam już Gulp 4 i nadal nie działa!

Jeśli, podobnie jak ja, używasz już Gulp 4+ (użyłem Gulp 4.0.2, pierwotnie na węźle 10) i niedawno zaktualizowałeś (zaktualizowałem do Node 13.8.0), czy nadal występuje problem, być może dlatego, że zależność zależy od starsza wersja Gulp, która zostaje złapana w potok.

W moim przypadku gulp-combine-mqbyła zależność przy użyciu Gulp 3.9.*. Wyłączenie tego zadania w moim pliku gulp pozwoliło Gulpowi na ponowne uruchomienie.

Jeśli tak się stanie, masz kilka opcji: możesz,

  1. Przejdź bez wtyczki, jeśli nie jest to absolutnie konieczne
  2. Znajdź alternatywę,
  3. Napraw wtyczkę

Nie trzeba dodawać, że jeśli masz kilka wtyczek opartych na starszej wersji Gulpa - szczególnie jeśli te wtyczki są niezbędne dla Twojej aplikacji - w tym miejscu może być ogromna dodatkowa część czasu poświęcana na aktualizację Gulpa (stąd powyższe ostrzeżenia).

Jeśli tak się stanie, najlepiej obniżyć węzeł, przynajmniej do czasu wydania łatek.


4

Ten błąd jest spowodowany nową wersją Node (12) i starą wersją gulp (mniej niż 4).

Obniżenie węzła i innych zależności nie jest zalecane. Rozwiązałem to, aktualizując package.jsonpobieranie pliku najnowszej wersji wszystkich zależności. Do tego używam npm-check-updates. Jest to moduł, który aktualizuje package.jsonnajnowszą wersję wszystkich zależności.

Odniesienie : https://www.npmjs.com/package/npm-check-updates

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

W większości przypadków będziemy musieli zaktualizować gulpfile.jsrównież następujące elementy:

Odniesienie : https://fettblog.eu/gulp-4-parallel-and-series/#migration

Przed:

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']);
    }
);

Po:

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'));
    }
);

Świetne rozwiązanie, jeśli nie masz skomplikowanych plików gulp. W moim przypadku musiałem dostosować tylko dwie linie na plik gulpfile.js. Dziękujemy za krótki przewodnik migracji!
Tobias

3

Ten błąd pojawiał się w systemie Windows 10. Okazało się, że jest to uszkodzony profil mobilny.

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:

Usunięcie C:\Users\{user}\AppData\Roaming\npmfolderu rozwiązało mój problem.


2
Przepraszam, że to pomieszało moje wszystkie zależności npm.
ashilon

3

Wystarczy wykonać następujące kroki. Działa idealnie z instalacją npm uruchomioną wiele razy lub instalując inne moduły, a nawet publikując projekt w artifactory.

W tym samym katalogu, w którym znajduje się pakiet.json, utwórz plik npm-shrinkwrap.json o następującej zawartości:

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

Uruchom instalację npm i nie martw się, zaktualizuje ona npm-shrinkwrap.json o wiele treści. Pozbądźmy się tych aktualizacji, aktualizując opcje skryptów package.json .

"scripts": {
    "preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
    "postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}

Teraz możesz uruchomić npm install, a plik npm-shrinkwrap.json pozostanie nienaruszony i będzie działał wiecznie.


2

Mogło to nastąpić późno, ale dla każdego, kto nadal chce zachować swój Węzeł v12 podczas korzystania z najnowszego gulp ^ 4.0, wykonaj następujące kroki:

Zaktualizuj interfejs wiersza polecenia (tylko dla zachowania ostrożności), używając:

npm i gulp-cli -g

Dodaj / zaktualizuj gulpsekcję zależności poniżej pliku package.json

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

Usuń swój package-lock.jsonplik

Usuń swój node_modulesfolder

Na koniec uruchom, npm iaby zaktualizować i ponownie utworzyć nowy folder node_modules i plik package-lock.json z poprawnymi parametrami dla Gulp ^ 4.0

npm i

Uwaga Gulp.js 4.0 wprowadza metody series()i parallel()do łączenia zadań zamiast metod tablicowych używanych w Gulp 3, więc możesz napotkać błąd w starym gulpfile.jsskrypcie.

Aby dowiedzieć się więcej o stosowaniu tych nowych funkcji, ta strona naprawdę to zrobiła: https://www.sitepoint.com/how-to-migrate-to-gulp-4/

( Jeśli to pomoże, proszę rzucić okiem )


Co to jest gulp-cliza? Śledziłem twoje kroki i na początku wszystko działało; ale potem odinstalowałem gulp-cli(ponieważ nie widziałem, gdzie był używany) i wszystko nadal działało. Dziękuję za odpowiedź, ponieważ znów jestem gotowy do pracy z node v12.9.1i Gulp 4.0.2!
MuffinTheMan

Cieszę się, że to pomogło. gulp-clijest narzędziem wiersza poleceń. Zapewnia to prawidłową instalację gulp Jak widać w krokach instalacji gulp tutaj: gulpjs.com/docs/en/getting-started/quick-start
Sab



2

Napotkałem ten sam problem. Co próbowałem i pracowałem dla mnie:

  1. Sprawdź wersję NODE i GULP (kombinacja węzła v12 i łyka mniejszych niż v4 nie działa)

  2. Obniżam wersję NPM przez:

    • sudo NPM install -gn
    • sudo n 10.16.0

Działało dobrze, a następnie postępuj zgodnie z instrukcjami konsoli.



1

Dla tych, którzy używają yarn.

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

Nie używaj krótkiej gałęzi NodeJS (wszystkie nieparzyste numery wersji, takie jak 9 i 11), użyj NodeJS 10.
Daniel Ruf

0

Dla każdego, kto ma ten sam błąd z tego samego powodu w ADOS CI Build:

To pytanie było pierwszym, które znalazłem, kiedy szukałem pomocy. Mam potok kompilacji ADOS CI, w którym pierwsze zadanie instalatora narzędzia Node.js służy do zainstalowania Node. Następnie do zainstalowania gulp służy zadanie npm (npm install -g gulp). Następnie następujące zadanie Gulp uruchamia domyślne zadanie z gulpfile.js. Jest w tym coś z łyka.

Kiedy zmieniłem narzędzie Node.js, aby zainstalować najnowszy węzeł 12.x zamiast starszego, a najnowszą wersją gulp była 4.0.2. Wynik był taki sam błąd, jak opisano w pytaniu.

W tym przypadku działało dla mnie obniżenie wersji node.js do najnowszej wersji 11.x, jak już zasugerowali Alphonse R. Dsouza i Aymen Yaseen. W tym przypadku jednak nie trzeba używać sugerowanych poleceń, a jedynie ustawić specyfikację wersji instalatora narzędzia Node.js na najnowszą wersję węzła od 11.x.

wprowadź opis zdjęcia tutaj

Dokładna wersja Node.js, która została zainstalowana i działa, to 11.15.0. Nie musiałem obniżać poziomu Gulpa.


0

Wystąpił ten błąd po aktualizacji mojego węzła do wersji 12, która nie działa z Gulp 3.9.1. Jeśli chodzi o fakt, że mój plik gulpfile.js nie był tak skomplikowany, postanowiłem uaktualnić go do wersji Gulp 4, korzystając z tego artykułu. Poszło dobrze i jest o wiele łatwiejsze, niż myślałem.



0

Wynika to z faktu, że występuje problem ze zgodnością między systemem nodea jego gulpsystemem. Obniżenie nodelub uaktualnienie gulprozwiąże ten problem.

sudo npm i -g n
sudo n 11.15.0

Spróbuj usunąć node_modulesfolder i package-lock.jsonplik i zainstaluj ponownie, używając npm ipolecenia, jeśli nadal nie działa.


0

Dla mnie zadziałało użycie Python2 podczas instalacji npm.

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

0

Ponieważ ten błąd również pojawia się, gdy korzystamy z pakietu s3 NPM. Problem polega na tym, że pakiet graceful-fs musi zostać zaktualizowany. Działa dobrze w 4.2.3.

Więc po prostu zobacz, jaki pakiet NPM pokazuje w dziennikach śledzenia i zaktualizuj graceful-fs zgodnie z 4.2.3.




0

Jeśli próbujesz zainstalować semantic-uii wystąpi następujący błąd, spróbuj pobrać najnowszą wersję węzła js(13.5.0)z najnowszymi funkcjami, z Node.js.org. Ponadto zamiast próbować instalacji semantycznej NPM powinieneś po prostu dodać link (który możesz znaleźć z linku cdnjs do nagłówka index.htmlpliku. Powodzenia!


Przykład kodu byłby tutaj świetnym dodatkiem.
rhand

-1

Kroki w celu rozwiązania problemu: -

Rozwiązałem problem z następującymi krokami: -

  1. Instalowanie NVM
  2. Zainstalowano lts / dubnium za pomocą polecenia „ nvm install lts / dubnium
  3. Użyj lts / dubnium za pomocą polecenia „ nvm install lts / dubnium

Teraz możesz wdrożyć przełknięcie


1
To niedokładny duplikat odpowiedzi @kevink
Z4-

-1

Sugeruję, aby najpierw upewnić się, że instalacja NPM nie stanowi problemu. Następnie obniżysz wersje węzła i przełknięcia. Użyłem węzła 10.16.1 i łyka 3.9.1.

Aby obniżyć swój łyk, możesz spróbować

npm install gulp@^3.9.1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.