[英]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
。
Yarn v1 支持將 package 解析為定義的版本。 您需要在package.json
中添加resolutions
部分:
{
// Your current package.json contents
"resolutions": {
"graceful-fs": "^4.2.9"
}
}
感謝@jazd以這種方式解決問題。
npm@^8.3.0
使您能夠覆蓋項目依賴項的 package 版本。 為此,您應該在 package.json 中添加overrides
部分:
{
// Your current package.json
"overrides": {
"graceful-fs": "^4.2.9"
}
}
使用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 上,它非常適合我
在您擁有package.json
的同一目錄中,創建一個npm-shrinkwrap.json
shrinkwrap.json 文件,其內容如下:
{ "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
運行npm install
,別擔心,它會用一堆內容更新npm-shrinkwrap.json
shrinkwrap.json 。
運行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 的回答只需稍加改動即可。
如果出現此錯誤,這是我的工作流程:
npm install
npm install gulp
創建文件npm-shrinkwrap.json與
{ "dependencies": { "graceful-fs": { "version": "4.2.2" } } }
npm install
(再次)(不是npm install gulp
非常重要 - 否則錯誤會回來)
gulp(正在工作)
使用NVM管理您正在使用的 Node.js 版本,運行以下命令對我有用:
cd /to/your/project/
nvm install lts/dubnium
nvm use lts/dubnium
yarn upgrade # or `npm install`
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 重寫為新語法,並且可能(閱讀:可能會 - 看到此評論的結尾)導致與某些依賴項發生沖突。
這是最簡單和最快的選擇。 特別是如果您使用n或nvm ,因為它們允許您非常快速地安裝和在 Node.js 版本之間切換。
n 10.16.0
nvm install 10.16.0
完成此操作后,您可能需要重建npm 依賴項,或者刪除node_modules
文件夾和package-lock.json
文件並重新安裝依賴項。 雖然如果您只是恢復到先前存在的 Node.js 版本,您應該沒問題。
如上所述,這是一項更耗時的任務,但從長遠來看,它可能會帶來好處。 例如,Node.js 12 現在引入了對 ES 模塊的本機支持(在實驗標志后面)和 Node.js 13 中的完全支持。
您可能需要升級 Node.js 才能使用它,迫使您升級 Gulp。 或者您可能只是想要使用 Gulp 4 的好處,因為它可以更好、更有效地控制寫入任務。
已經有很多關於這方面的文章,所以我不會進一步詳細說明細節,但重申一下 -這不是一項快速的工作。 根據您項目的大小,可能需要進行一些顯着的重寫,並且您的依賴項可能會中斷。 如果您時間不夠用,您應該選擇簡單地降級 Node.js,至少是暫時的。
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 再次運行。
如果發生這種情況,您有幾個選擇。 你可以,
不用說,如果您有幾個依賴於舊版本 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
查看 Node.js 版本:
node --version
檢查 gulp 版本:
gulp -v
如果 Node.js >=12 和 gulp <= 3,請執行以下操作之一:
sudo npm install -g gulp
sudo npm install -g n
sudo n 11.15.0
如果問題不是來自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 安裝的版本。
我遇到了同樣的問題。 我嘗試了什么,什么對我有用:
檢查Node.js和Gulp.js的版本(Node.js v12 和 ZF5700A2964CF2DA0B4D90F7 的組合不工作)
我通過以下方式降級了 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
文件夾解決了我的問題。
升級到 4.0.1 並確保遷移https://fettblog.eu/gulp-4-parallel-and-series/#migration
如果在使用最新的 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
版本。 這是該版本的鏈接。 這對我有幫助,也可以解決您的問題。
我已經嘗試了很多建議來解決我的 Windows 10 機器上的現有項目的這個問題,並最終按照這些步驟來解決它;
gulp -v
然后node -v
檢查它是否已完全卸載。請注意,有時當我在 git 分支之間切換時,我可能需要關閉我的 Visual Studio 並再次以管理員身份運行它才能看到此解決方案再次運行。
據我所知,在我為一個新項目安裝了 Node.js 的最新推薦版本(12.18.4)后,這個問題開始發生,我只有在現有的 web 項目上沒有反映一些 FE 更改時才意識到這一點。
更新:今天我在新 PC 上設置現有項目之一時遇到了同樣的問題,我做了同樣的步驟 + 轉到我有 gulpfile 的目錄,然后運行npm install
。
安裝 gulp 並將您的 Node.js 版本添加到package.Z466DEEC76ECDF5FCA65D38571F6324文件中
{
"dependencies": {
"node": "^10.16.3"
}
}
看來您已將 nodejs 的版本升級為 +12 並且仍在使用 gulp 3.9.1
您可以使用以下解決方案之一
我遇到了同樣的錯誤,但它是由不同的問題引起的。
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
你在這里有兩個選擇
這是因為你的系統中node
和gulp
之間的兼容性問題。 降級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
對我來說,在使用 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。 之后它工作得很好。
解決問題的步驟:
我已通過以下步驟解決了問題:
nvm install lts/dubnium
nvm install lts/dubnium
現在您可以部署 gulp。
對於遇到此問題的任何人,請確認您沒有做過我做過的愚蠢的事情,並且在一百萬年前不小心在您的用戶目錄中運行了npm init
並忘記清除這些文件。
我在嘗試使用@vue-cli
創建一個新項目時發現了這個問題,它最終成為了一個流氓package.json
/ package-lock.json
node_modules
和我的模塊用戶文件夾的根目錄。
解決方案:從您的用戶目錄中刪除package.json
, package-lock.json
和node_modules
,瞧,問題解決了,現在從 forehead 中刪除手掌
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.