Next.js 實戰 (八):使用 Lodash 打包構建產生的“坑”?

前言

最近一直在折騰 Nextjs15 ,也在斷斷續續地寫《Next.js15 實戰系列》的文章,后來總感覺文章如果沒有線上效果預覽差點意思,所以就想著先把目前做的項目先部署上線,后續再慢慢添加新功能。

因為之前沒有部署過 Nextjs15 工程項目,我就隱約感覺沒有那么簡單,果不其然,開發環境一切正常,打包構建時一堆報錯。

問題分析

控制臺報錯日志:

../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js
profile:build: Dynamic Code Evaluation (e. g. 'eval', 'new Function', 'WebAssembly.compile') not allowed in Edge Runtime 
profile:build: Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
profile:build: 
profile:build: Import trace for requested module:
profile:build: ../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js
profile:build: ../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js
profile:build: ../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lodash.js
profile:build: ./src/utils/Fetcher.ts
profile:build: ./src/@types/schema.ts
profile:build: 
profile:build: ../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/template.js
profile:build: Dynamic Code Evaluation (e. g. 'eval', 'new Function', 'WebAssembly.compile') not allowed in Edge Runtime 
profile:build: Used by default
profile:build: Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
profile:build: 
profile:build: Import trace for requested module:
profile:build: ../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/template.js
profile:build: ../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lodash.js
profile:build: ./src/utils/Fetcher.ts
profile:build: ./src/@types/schema.ts

很明顯,這是由于工程中使用了 lodash-es 產生的報錯。

我就納悶了,開發環境使用 lodash-es 一切正常,能有什么報錯?

我跑到 Nextjs15 的 issues 尋找原因,發現真的有人有同樣的問題 - #51401,了解更多:Dynamic code evaluation is not available in Middleware

具體而言,不支持以下 api

  1. eval()
  2. new Function()
  3. WebAssembly.compile
  4. WebAssembly.instantiate

應該是 lodash-es 的源碼中包含了其中的 api ,導致打包報錯。

解決問題

一開始我按照官網和 #51401 的方案去嘗試解決問題

export const config = {runtime: "experimental-edge",unstable_allowDynamic: ["/src/utils/Fetcher.ts","/src/@types/schema.ts","*/`/node_modules/lodash-es/`",],matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
};

但是不管我如何更改,折騰了一天,打包時這個報錯依然存在。

最后實在沒辦法,因為我使用 lodash-es 的 api 不多,最終刪除了 lodash-es,拷貝 radash 的部分源碼到本地,最后打包果然沒問題。

這個可能是最笨最無奈的辦法了,如果大家發現更好的解決方案,可以留言討論,哈哈

Github:next-admin

線上預覽地址:Next Admin

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66380.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的世界-與門、或門、非門等基本門電路實現

一、紅石比較器 (1) 紅石比較器結構 紅石比較器有前端單火把、后端雙火把以及兩個側端 其中后端和側端是輸入信號,前端是輸出信號 (2) 紅石比較器的兩種模式 比較模式 前端火把未點亮時處于比較模式 側端>后端 → 0 當任一側端強度大于后端強度時,輸出…

項目開發實踐——基于SpringBoot+Vue3實現的在線考試系統(七)

文章目錄 一、題庫管理模塊實現1、新增題目功能實現1.1 頁面設計1.2 前端功能實現1.3 后端功能實現1.4 效果展示2、題目列表功能實現2.1 頁面設計2.2 前端功能實現2.3 后端功能實現2.3.1 后端查詢題目列表接口實現2.3.2 后端編輯試題接口實現2.4 效果展示二、代碼下載一、題庫管…

打破編程“鄙視鏈”:探索行業發展新路徑

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 打破…

【統計的思想】假設檢驗(一)

假設檢驗是統計學里的重要方法,同時也是一種“在理想與現實之間觀察求索”的測試活動。假設檢驗從概率的角度去考察理想與現實之間的關系,籍此來緩解測試可信性問題。 我們先來看一個例子。民航旅客服務系統,簡稱PSS系統,有一種業…

SpringBoot2 + Flowable(UI)

文章目錄 引言I 技術棧軟件架構基于 Vue.js 和 Element UI 的后臺管理系統工程結構II 依賴rest,logic,conf 的依賴工作流flowable jar包flowable-ui所需jar包III 配置jdbc 配置 nullCatalogMeansCurrent = true引言 I 技術棧 軟件架構 前端基于vue 、element-ui框架分模塊設…

Linux探秘坊-------3.開發工具詳解(1)

1 初識vim編輯器 創建第一個vim編輯的代碼 1.新建文件 2.使用vim打開 3.打開默認是命令模式,寫代碼需要在屏幕上輸出“i”字符 1.寫完代碼后要按Esc鍵退出到指令模式2.再按shift:wq即可保存并退出vim (因為不支持鼠標,通常 使用鍵盤上的箭…

基于海思soc的智能產品開發(高、中、低soc、以及和fpga的搭配)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 市場上關于圖像、音頻的soc其實非常多,這里面有高、中、低檔,開發方式也不相同。之所以會這樣,有價格的因素&am…

51單片機——DS18B20溫度傳感器

由于DS18B20數字溫度傳感器是單總線接口,所以需要使用51單片機的一個IO口模擬單總線時序與DS18B20通信,將檢測的環境溫度讀取出來 1、DS18B20模塊電路 傳感器接口的單總線管腳接至單片機P3.7IO口上 2、DS18B20介紹 2.1 DS18B20外觀實物圖 管腳1為GN…

STL容器-- list的模擬實現(附源碼)

STL容器-- list的模擬實現(附源碼) List的實現主要時考察我們對list這一容器的理解,和代碼的編寫能力,通過上節對list容器的使用,我們對list容器已經有了一些基本的了解,接下來就讓我們來實現一些list容器常…

Redis 學習指南與資料分享

Redis學習資料 Redis學習資料 Redis學習資料 Redis 作為一款高性能內存數據庫,在當今軟件開發領域占據著重要地位。其豐富的數據類型、強大的功能特性以及廣泛的應用場景,吸引著眾多開發者深入學習。以下為你精心整理的 Redis 學習指南與實用資料分享&…

Lynx TiDB 慢日志收集工具

作者: 小龍蝦愛大龍蝦 原文來源: https://tidb.net/blog/7247e68f 簡介 lynx 工具可以定時將 TiDB 集群的慢查詢收集并持久化到后端數據庫中,然后通過 grafana 查詢展示出來,這可以幫助我們更好的分析慢查詢日志。 背景 盡管…

Gin 源碼概覽 - 路由

本文基于gin 1.1 源碼解讀 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注冊路由 我們先來看一段gin代碼,來看看最終得到的一顆路由樹長啥樣 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…

docker 基礎語法學習,K8s基礎語法學習,零基礎學習

下面是關于Docker和Kubernetes的基礎語法學習資料,包括一些關鍵概念和示例代碼。 Docker 基礎語法 1. 安裝 Docker 首先,你需要安裝 Docker。以下是不同操作系統上的安裝指南: Windows/Mac: 下載并安裝 Docker Desktop。 Linux: 根據你的…

【逆境中綻放:萬字回顧2024我在挑戰中突破自我】

🌈個人主頁: Aileen_0v0 🔥熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?💫個人格言:“沒有羅馬,那就自己創造羅馬~” 文章目錄 一、引言二、個人成長與盤點情感與心理成長學習與技能提升其它榮譽 三、年度創作歷程回顧創作內容概…

職場溝通與行為

職場溝通與行為 引言 在職場上,你是否曾遇到過困惑的溝通?是否對同事的行為有過疑慮?這不僅是個別現象,而是我們這個時代工作文化中的普遍問題。許多職場的摩擦,來自溝通不暢或是行為不當。那么,如何才能…

【Linux 重裝】Ubuntu 啟動盤 U盤無法被識別,如何處理?

背景 U盤燒錄了 Ubuntu 系統作為啟動盤,再次插入電腦后無法被識別 解決方案(Mac 適用) (1)查找 USB,(2)格式化(1)在 terminal 中通過 diskutil list 查看是…

中職網絡建設與運維ansible服務

ansible服務 填寫hosts指定主機范圍和控制節點后創建一個腳本,可以利用簡化腳本 1. 在linux1上安裝系統自帶的ansible-core,作為ansible控制節點,linux2-linux7作為ansible的受控節點 Linux1 Linux1-7 Yum install ansible-core -y Vi /etc/ansible/hosts 添加…

數據庫服務體系結構

1. 數據庫服務應用配置 服務進行配置有什么作用? 實現服務運行啟動 實現某些功能 應用配置有三種方式? 利用編譯安裝進行配置 編寫配置文件信息 ,.默認的配置文件: /etc/my.cnf 利用啟動命令參數配置信息,mysqld_safe --skip-grant-tables --…

Langchain+FastApi+Vue前后端Ai對話(超詳細)

一、引入 首先可以先看下作者的文章 FastApi相關文章:創建最簡單FastApi的項目Vue相關文章:最簡單的aixos二次封裝Langchain相關文章:如何使用LangSmith跟蹤deepseek模型 二、后端搭建 1 項目文件結構 routers:存放api接口se…

如何在不暴露MinIO地址的情況下,用Spring Boot與KKFileView實現文件預覽

在現代Web應用中,文件預覽是一項常見且重要的功能。它允許用戶在不上傳或下載文件的情況下,直接在瀏覽器中查看文件內容。然而,直接將文件存儲服務(如MinIO)暴露給前端可能會帶來安全風險。本文將介紹如何在不暴露MinI…