node中webpack打包mysql報錯 Module not found: Error: Can't resolve 'fs' 、'net'、'tls'

  最近寫了一個node項目,作用是通過js代碼來處理一些mysql數據庫的數據。爲了方便後臺同事操作方便,我就想把所有的處理模塊合起來用webpack打包成一個js文件給後臺的同事使用,抱着這樣的想法我就開始了,然而…webpack給了我一堆這樣的錯誤:
在這裏插入圖片描述
  通過各種嘗試發現,這些報錯是 require('mysql')引起的,應該是mysql中引用了fs、tls、net 這些模塊,然後這些模塊又無法使用webpack進行打包,然後就百度,百度不行就谷歌,相關的資料很少,但是功夫不負有心人,在一個國外的帖子中看到一個類似問題,最後結帖的評論是 webpack是打包前端模塊的,技術上不支持打包node服務端的這些模塊
  也就是說,我一開始的想法就是錯誤的,不應該想着一定要將mysql打包到js文件中,而是應該將mysql排除在webpack打包的模塊之外,然後在js文件運行時提供mysql模塊。這時我們就可以用到webpack的externals節點的配置,通過這個配置可以在webpack時不打包mysql模塊,在輸出的js文件中保留require('mysql'),然後在打包好的js文件運行時引用外部的mysql模塊。這種方式也是webpack在打包服務端的node工程時所採用的方法。具體配置如下:

module.exports = {
	externals: {
		mysql: 'commonjs mysql'
	}
}

打包好後,將mysql的npm包手動放到index.bundle.js同級的node_modules文件夾內,最後用於運行的文檔結構如下所示:
在這裏插入圖片描述
index.bundle.js是打包後的js文件,node_modules是該js運行依賴的外部庫,進入該文件夾後直接運行node index.bundle.js 就能成功執行index.bundle.js文件了。

發佈了70 篇原創文章 · 獲贊 15 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章