整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
解決使用 Gulp 發生 regeneratorRuntime is not defined 問題
前言
這一篇稍微記錄一下關於使用 gulp-babel 發生 regeneratorRuntime is not defined 的問題。
問題
六角學院這邊其實有提供一個 Gulp 範例,也就是「web-layout-training-gulp」這個儲存庫。
那麼這邊我們先試著製造一個會發生 regeneratorRuntime is not defined 的錯誤
1 | |
基本上當你運行 gulp 時就可以看到瀏覽器噴了 Uncaught ReferenceError: regeneratorRuntime is not defined 這個錯誤

那麼該怎麼解決呢?我們往下看。
解決方式
由於我們這邊 gulp 所使用的套件是 gulp-babel 因此官方文件上是有說明教你怎麼改的。
首先你必須先安裝以下套件
1 | |
接著打開 gulpfile.js/index.js,並找到 babel 的設定
1 | |
接著將 .pipe($.babel({ presets: ['@babel/env'], })) 改掉,所以目前 babel 的設定應該會長這樣
1 | |
那麼上方就是官方所提供的解決方式,但是如果你直接套用到 「web-layout-training-gulp」 這個儲存庫上,你會發現還是會發生其他錯誤。
因此接下來我將會一步一步分析解決這個問題
奇妙的 Uncaught SyntaxError
這邊所指的奇妙錯誤也就是 Uncaught SyntaxError: redeclaration of const Urladmin-member.js:46:4note: Previously declared at line 2, column 6 或是 Uncaught SyntaxError: Identifier 'Url' has already been declared

這個錯誤主要問題是因為我們把 presets: ['@babel/env'], 拔掉的關係,導致沒有辦法轉換 ES6 的語法,因此我們必須要再加上 presets: ['@babel/env'], 這個設定。
1 | |
詭異的 require is not defined
加回去後另一個更奇妙的問題又發生了,你會發現噴出了 Uncaught ReferenceError: require is not defined 這個錯誤。

那麼該怎麼解決呢?這邊讓我們看一下當前 package.json 中 babel 相關檔案的版本
1 | |
我們可以看到目前上方的 @babel/core 與 @babel/preset-env 的版本是 7.12.3 與 7.12.1,而下方的 @babel/plugin-transform-runtime 的版本是 7.19.6,因此我們必須要將上方的版本都更新。
那麼為了更新乾脆一點,所以我們會連 gulp-babel 一起更新。
1 | |
接著我們回到 gulpfile.js/index.js,將原本加上的 plugins: ['@babel/transform-runtime'] 移除改回原本的設定。
1 | |
這樣子原本發生的那幾個錯誤 Uncaught ReferenceError: require is not defined、Uncaught SyntaxError: redeclaration of const Urladmin-member.js:46:4note: Previously declared at line 2, column 6 與 Uncaught ReferenceError: regeneratorRuntime is not defined 就都會得到解決哩。
而這些問題主要是與 @babel/core 與 @babel/preset-env 的版本不同導致的,因此我們必須要將版本更新到一致,當然也跟 Gulp 套件有相關哩。
參考文獻
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ