簡體   English   中英

如何修復 Node.js 中的“ReferenceError:primordials is not defined”

[英]How to fix "ReferenceError: primordials is not defined" in Node.js

我已經通過“npm install”安裝了 Node.js 模塊,然后我嘗試在命令提示符下執行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

我遇到了同樣的錯誤。 I suspect you're using Node.js 12 and Gulp.js 3. That combination does not work: Gulp.js 3 is broken on Node.js 12 #2324

1 月以前的解決方法也不起作用:更新到 Node.js 11.0.0 后,運行 Gulp.js 退出並出現“ReferenceError:internalBinding is not defined”#2246

解決方案:升級到 Gulp.js 4 或降級到 Node.js 的早期版本。

在將依賴gulp@3.9.1的舊項目更新到 Node.js 12+ 時,我們遇到了同樣的問題。

這些修復使您能夠通過將graceful-fs覆蓋到版本^4.2.9來使用 Node.js 12+ 和gulp@3.9.1

如果您使用的是紗線 v1

Yarn v1 支持將 package 解析為定義的版本 您需要在package.json中添加resolutions部分:

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

感謝@jazd以這種方式解決問題。

如果您使用的是 npm >= 8.3.0

npm@^8.3.0使您能夠覆蓋項目依賴項的 package 版本。 為此,您應該在 package.json 中添加overrides部分

{
  // Your current package.json
  "overrides": {
    "graceful-fs": "^4.2.9"
  }
}

如果您使用的是 npm < 8.3.0

使用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.9"
  }
}

npm-force-resolutions將更改package-lock.json文件以在install完成之前將graceful-fs設置為所需版本。

如果您在項目中使用自定義.npmrc文件並且它包含代理或自定義注冊表,則您可能需要將 npx npm-force- npx npm-force-resolutions更改為npx --userconfig.npmrc npm-force-resolutions因為到目前為止,默認情況下, .npmrc npx

問題的根源

這個問題源於gulp@3.9.1依賴graceful-fs@^3.0.0的猴子補丁 Node.js fs模塊的事實。

這曾經與 Node.js 一起工作,直到版本 11.15(這是來自開發分支的版本,不應在生產中使用)。

graceful-fs@^4.0.0不再對 Node.js fs模塊進行猴子補丁,這使其與 Node.js > 11.15 兼容(測試並使用版本 12 和 14)。

請注意,這不是一個長期的解決方案,但當您沒有時間更新到gulp@^4.0.0時,它會有所幫助。

一分鍾搞定:

只需按照這些步驟 我在 Windows 10 上,它非常適合我

  1. 在您擁有package.json的同一目錄中,創建一個npm-shrinkwrap.json shrinkwrap.json 文件,其內容如下:

     { "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
  2. 運行npm install ,別擔心,它會用一堆內容更新npm-shrinkwrap.json shrinkwrap.json 。

  3. 運行gulp啟動項目。

使用以下命令並安裝Node.js v11.15.0

npm install -g n

sudo n 11.15.0

將解決

ReferenceError: primordials 未在節點中定義

參考@Terje Norderhaug @Tom Corelis 的答案。

使用以下命令安裝 Node.js v11.15.0 和 Gulp.js 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 未在節點中定義

對我來說, Diego Fortes 的回答只需稍加改動即可。

如果出現此錯誤,這是我的工作流程:

  1. npm install

  2. npm install gulp

  3. 創建文件npm-shrinkwrap.json

    { "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
  4. npm install (再次)(不是npm install gulp非常重要 - 否則錯誤會回來)

  5. gulp(正在工作)

使用NVM管理您正在使用的 Node.js 版本,運行以下命令對我有用:

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

TL:博士

Gulp 3.*不適用於 Node.js 12.*或更高版本。 您必須降級 Node.js,或升級 Gulp。

如果時間緊迫,請將 Node.js 降級到 v11.* 或以下; 如果您需要更新的功能,並且有時間修復大量損壞的依賴項,請將 Gulp 升級到 4.* 或更高版本

正如其他人已經提到的,Node.js 12 或更高版本不支持 Gulp 3.*,因此您必須將 Node 版本降級到 11.* 或更低版本,或者將您的 ZF5700A296CF2DA0C74D90F780.AE8 升級到

最好的選擇最終取決於你有多少時間,因為升級 Gulp 帶來了更干凈的 gulpfile 和對任務串行或並行運行的內置控制的好處,但也依賴於你將 gulpfile 重寫為新語法,並且可能(閱讀:可能會 - 看到此評論的結尾)導致與某些依賴項發生沖突。


降級 Node.js

這是最簡單和最快的選擇。 特別是如果您使用nnvm ,因為它們允許您非常快速地安裝和在 Node.js 版本之間切換。

N上安裝Node.js版本

n 10.16.0

在 NVM 上安裝 Node.js 版本

nvm install 10.16.0

完成此操作后,您可能需要重建npm 依賴項,或者刪除node_modules文件夾package-lock.json文件並重新安裝依賴項。 雖然如果您只是恢復到先前存在的 Node.js 版本,您應該沒問題。


升級Gulp

如上所述,這是一項更耗時的任務,但從長遠來看,它可能會帶來好處。 例如,Node.js 12 現在引入了對 ES 模塊的本機支持(在實驗標志后面)和 Node.js 13 中的完全支持。

您可能需要升級 Node.js 才能使用它,迫使您升級 Gulp。 或者您可能只是想要使用 Gulp 4 的好處,因為它可以更好、更有效地控制寫入任務。

已經有很多關於這方面的文章,所以我不會進一步詳細說明細節,但重申一下 -這不是一項快速的工作 根據您項目的大小,可能需要進行一些顯着的重寫,並且您的依賴項可能會中斷。 如果您時間不夠用,您應該選擇簡單地降級 Node.js,至少是暫時的。


但是我已經有Gulp 4了,還是不行

If, like me, you are already using Gulp 4+ (I was using Gulp 4.0.2 , originally on Node.js 10) and have recently upgraded (I upgraded to Node.js 13.8.0) are you are still getting the issue, it may be因為依賴項依賴於舊版本的 Gulp,而這正陷入困境。

就我而言, gulp-combine-mq是使用 Gulp 3.9.* 的依賴項。 在我的 gulpfile 中禁用此任務允許 Gulp 再次運行。

如果發生這種情況,您有幾個選擇。 你可以,

  1. Go 沒有插件,如果不是絕對必要的話
  2. 尋找替代方案,
  3. 修復插件

不用說,如果您有幾個依賴於舊版本 Gulp 的插件 - 特別是如果這些插件對您的應用程序至關重要 - 這可能會花費大量額外的時間來升級 Gulp(因此出現上述警告) .

如果發生這種情況,最好只降級 Node.js,至少在可以發布補丁之前。

簡單優雅的解決方案

只需按照以下步驟操作。 它與 npm 安裝運行多次或安裝任何其他模塊甚至發布項目到工件完美配合。

在您擁有 package.json 的同一目錄中,創建一個npm- shrinkwrap.json 文件,其內容如下:

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

運行 npm 安裝,別擔心,它會用一堆內容更新 npm-shrinkwrap.json。 讓我們通過更新package.json腳本選項來擺脫這個更新。

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

現在您可以運行 npm 安裝,並且您的 npm-shrinkwrap.json 將完好無損並且將永遠工作。

Gulp 3.9.1 不適用於 Node v12.xx,如果升級到 Gulp 4.0.2,則必須使用新語法(系列和並行)完全更改 gulpfile.js。 所以你最好的選擇是通過在終端中簡單地使用以下代碼來降級到 Node.js 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

我有同樣的錯誤。 I finally fixed that when I updated all packages and then mentioned the same Node.js engine version and npm version in package.json as it is in my local working system.

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

Heroku上部署時出現此錯誤。

有關更多信息,請查看Heroku 支持

查看 Node.js 版本:

 node --version

檢查 gulp 版本:

gulp -v

如果 Node.js >=12 和 gulp <= 3,請執行以下操作之一:

  1. 升級gulp
sudo npm install -g gulp
  1. 降級節點
sudo npm install -g n
sudo n 11.15.0

如何使用 npm 升級(或降級)Node.js

如果問題不是來自gulp則檢查解壓縮npm 模塊。 自上次更新以來已經過去了大約六年。 它不適用於 Node.js > v11。

嘗試這個:

npm install -g n

sudo n 11.15.0

這個錯誤是因為新版本的Node.js (12)和舊版本的Gulp (小於4)。

不建議降級 Node.js 和其他依賴項。 我通過更新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 ,如下所示:

參考Gulp 4:新的任務執行系統——gulp.parallel和gulp.series,遷移

前:

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

            ....
    }
);

Other configuration...

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

我的問題僅出現在 Visual Studio 的Task Runner Explorer中,而不是從命令行或 PowerShell 運行時。

我意識到 VS 忽略了我用NVM設置的 Node 版本。

這篇文章給出了答案: Configure which NPM is used by Visual Studio's Task Runner Explorer? 通過將PATH變量設置為比 VS 中的外部工具更高的優先級,它使用了 NVM 設置的 Node 版本,而不是 VS 安裝的版本。 在此處輸入圖像描述

我遇到了同樣的問題。 我嘗試了什么,什么對我有用:

  1. 檢查Node.jsGulp.js的版本(Node.js v12 和 ZF5700A2964CF2DA0B4D90F7 的組合不工作)

  2. 我通過以下方式降級了 NPM 版本:

     sudo NPM install -gn sudo n 10.16.0

它工作得很好。 然后只需按照控制台的說明進行操作即可。

降級到 Node.js stable 為我解決了這個問題,因為它發生在我升級到 Node.js 12 之后:

sudo n 10.16.0

我在 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文件夾解決了我的問題。

如果在使用最新的 gulp ^4.0 的同時保留 Node.js v12,請執行以下步驟:

使用以下命令更新命令行界面(只是為了預防起見):

npm i gulp-cli -g

package.json文件的依賴項部分下添加/更新gulp

"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腳本中遇到錯誤。

要了解有關應用這些新功能的更多信息,此站點確實做到了:如何遷移到 Gulp.js 4.0

我通過從添加或刪除程序→ Node.js 卸載 Node.js 在 Windows 10 上修復了此問題。

然后我從https://nodejs.org/download/release/v11.15.0/安裝了 11.15.0 版本

如果您正在運行 Windows 64 位,請選擇node-v11.15.0-x64.msi

如果您嘗試安裝semantic-ui並且出現以下錯誤,請嘗試從 Node.js.org 下載具有最新功能的 Node.js js(13.5.0)的最新版本。

此外,與其嘗試 NPM 安裝語義,不如將鏈接(可以從cdnjs 鏈接中找到)添加到index.html文件的 header 中。

Gulp 與 Node.js 版本 11 及更高版本有關。 卸載您當前的 Node.js 版本並重新安裝v10.15.1版本。 這是該版本的鏈接。 這對我有幫助,也可以解決您的問題。

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

我已經嘗試了很多建議來解決我的 Windows 10 機器上的現有項目的這個問題,並最終按照這些步驟來解決它;

  • 從“添加或刪除程序”中卸載 Node.js。 啟動一個新的命令提示符並輸入gulp -v然后node -v檢查它是否已完全卸載。
  • 下載並安裝 Node.js v10.16.0 - 不是最新的,因為我看到的最新節點和 gulp 組合導致了問題。 在安裝過程中,我沒有更改我通常做的安裝路徑(C:\Program Files\nodejs)。
  • 如圖所示,打開一個新的命令提示符 go 到您的項目目錄,其中您有 gulpfile.js 並啟動 gulp。

請注意,有時當我在 git 分支之間切換時,我可能需要關閉我的 Visual Studio 並再次以管理員身份運行它才能看到此解決方案再次運行。

據我所知,在我為一個新項目安裝了 Node.js 的最新推薦版本(12.18.4)后,這個問題開始發生,我只有在現有的 web 項目上沒有反映一些 FE 更改時才意識到這一點。

更新:今天我在新 PC 上設置現有項目之一時遇到了同樣的問題,我做了同樣的步驟 + 轉到我有 gulpfile 的目錄,然后運行npm install

在此處輸入圖像描述

安裝 gulp 並將您的 Node.js 版本添加到package.Z466DEEC76ECDF5FCA65​​D38571F6324文件中

{
  "dependencies": {
    "node":  "^10.16.3"
  }
}

看來您已將 nodejs 的版本升級為 +12 並且仍在使用 gulp 3.9.1

您可以使用以下解決方案之一

  • 將您的 gup 版本升級為 +4
  • 或者干脆你使用NVM Node version Manager 在同一台機器上運行多個 nodejs 版本。

我遇到了同樣的錯誤,但它是由不同的問題引起的。

OS: windows 10
nodejs version: 15.12.0
npm version: 7.6.3

問題的原因是優雅-fs package。 每當我嘗試運行 npm 時,即使運行 npm-v 也會觸發“ReferenceError: primordials is not defined”。

我嘗試運行 npm install graceful-fs@latest,但它仍然不起作用,即使 package 是最新版本。

那么是什么幫助了我呢?

運行npm ls graceful-fs

通過這種方式,您將找到所有graceful-fs包以及它具有的版本。 就我而言,它主要是 3.0 版,即使我已經安裝了 4.2.6 版

那么如何解決呢?

打開 npm-shrinkwrap.json (不確定packages-lock.json)並更改搜索graceful-fs - 你會看到它在一些地方有舊版本。 將其替換為^4.2.6 (或更新版本)。

然后npm audit fix --force將在任何地方強制安裝較新版本。

希望這對您有用,我花了幾個小時才找到解決方法。

  • 刪除 package-lock.json 或 yarn.lock 文件。

  • 然后刪除 node_modules。

  • 之后修改 package.json 文件-

    “依賴項”:{“gulp”:“^4.0.0”}

  • 然后運行- npm install

解決這個問題就足夠了。

對於那些使用Yarn的人:

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

你在這里有兩個選擇

  1. 要么升級到 gulp 4 要么
  2. 降級到更早的 Node.js 版本。

這是因為你的系統中nodegulp之間的兼容性問題。 降級node或升級gulp將解決此問題。

sudo npm i -g n
sudo n 11.15.0

如果仍然無法正常工作,請嘗試刪除node_modules文件夾和package-lock.json文件並使用npm i命令再次安裝。

我在安裝 npm package webshot 時遇到了同樣的問題。

注意:這是 package 的一個已知問題,因為它依賴於幕后的優雅 fs。

修復: 1.將 graceful-fs 升級到 4.x 或更高版本

修復:2.使用 webshot-node 代替https://www.npmjs.com/package/webshot-node

由於我的項目使用的是 gulp 版本 4,因此我必須執行以下操作來解決此問題

  1. 刪除文件夾node_modules
  2. 打開 package.json 並更新版本

問題

更新

這是我正在使用的版本的詳細信息

版本

現在運行 npm install 然后運行 ​​gulp 默認。 錯誤應該消失了,您可能會看到:

任務從未定義:僅默認值。

對我來說,在使用 series() 組合任務后,問題就解決了。

這里的任何答案都沒有解決問題。

卸載節點,然后使用給定的鏈接重新安裝它。 https://nodejs.org/en/download/

我建議您首先確保NPM 安裝不是您的問題。 然后降級 Node.js 和 Gulp.js 版本。 我使用了 Node.js 10.16.1 和 Gulp.js 3.9.1。

要降級 Gulp.js 安裝,您可以嘗試:

npm install gulp@^3.9.1

npm安裝期間使用 Python 2(可執行python )對我有用:

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

當我們使用 s3 NPM package 時,我們也會收到此錯誤。 所以問題在於優雅的 fs package - 我們需要更新它。 它在 4.2.3 上運行良好。

因此,只需查看它在日志跟蹤中顯示的 NPM package 並相應地將優雅 fs 更新為 4.2.3。

對於在 ADOS CI Build 中出於相同原因出現相同錯誤的任何人:

這個問題是我在尋求幫助時發現的第一個問題。 我有一個 ADOS CI 構建管道,其中第一個 Node.js 工具安裝程序任務用於安裝 Node.js。 然后 npm 任務用於安裝 Gulp.js (npm install -g gulp)。 然后下面的 Gulp.js 任務從 gulpfile.js 運行 default-task。 里面有一些咕嚕咕嚕的東西。

當我更改 Node.js 工具以安裝 12.x 最新節點而不是較舊的節點時,最新的 Gulp.js 版本是 4.0.2。 結果與問題中描述的錯誤相同。

在這種情況下,對我有用的是將 Node.js 降級到最新的 11.x 版本,正如 Alphonse R 已經建議的那樣。 Dsouza 和 Aymen Yaseen。 在這種情況下,盡管不需要使用他們建議的任何命令,而只需將 Node.js 工具安裝程序版本規范設置為 11.x 中的最新 Node.js 版本。

在此處輸入圖像描述

已安裝並正在運行的 Node.js 的確切版本是 11.15.0。 我不必降級 Gulp.js。

我在 Node.js 12/13 和 Gulp.js 3 上也遇到了錯誤。移至 Node.js 11 有效。

我通過將 Node.js 版本從12.14.0降級到10.18.0並重新安裝node_modules來解決。

我使用的是 Node.js v12.13.1,所以我已經降級到 v10.19.0。 之后它工作得很好。

解決問題的步驟:

我已通過以下步驟解決了問題:

  1. 安裝 NVM
  2. 使用命令nvm install lts/dubnium
  3. 使用命令nvm install lts/dubnium

現在您可以部署 gulp。

對於遇到此問題的任何人,請確認您沒有做過我做過的愚蠢的事情,並且在一百萬年前不小心在您的用戶目錄中運行了npm init並忘記清除這些文件。

我在嘗試使用@vue-cli創建一個新項目時發現了這個問題,它最終成為了一個流氓package.json / package-lock.json node_modules和我的模塊用戶文件夾的根目錄。

解決方案:從您的用戶目錄中刪除package.jsonpackage-lock.jsonnode_modules ,瞧,問題解決了,現在從 forehead 中刪除手掌

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM