express搭建的nodejs項目使用webpack進行壓縮打包
背景:本文記錄使用express搭建nodejs后臺接口服務(wù),為了能放到服務(wù)器上面,需要對項目進行壓縮打包,使用了webpack5,記錄過程和問題。
項目結(jié)構(gòu)比較簡單,入口是app.js。

首先安裝webpack, webpack-cli, 這里直接安裝就是webpack5版本。
pnpm i webpack webpack-cli --save-dev
安裝完成后,在項目根目錄下創(chuàng)建webpack.config.js文件,編寫配置如下。
import path from 'path';
import { fileURLToPath } from 'url'
const __filenameNew = fileURLToPath(import.meta.url)
const __dirnameNew = path.dirname(__filenameNew)
export default {
entry: './src/app.js',
target:"node",
output: {
path: path.resolve(__dirnameNew, 'dist'),
filename: 'bundle.js',
},
};
這里面有3個點需要注意。
第一個我自己項目里面用的是esm規(guī)范, 也就 import 語法,為了使用這種規(guī)范,我在package.json里面配置了type: ‘module’, 屬性,因此在webpack配置里面沒有使用requir導(dǎo)入path。
第二個是直接使用 __filename,在打包時會報錯,報錯信息如下:

報錯原因是因為esm規(guī)范里面不提供__filename, 而在commonjs規(guī)范里面有,但是我這里有些依賴導(dǎo)入原因只能用esm,因此我們需要用另外一種方法去導(dǎo)入__filename。解決如下:
import { fileURLToPath } from 'url'
const __filenameNew = fileURLToPath(import.meta.url)
const __dirnameNew = path.dirname(__filenameNew)
之后直接使用__dirnameNew來替代__dirname即可。
第三個是如果現(xiàn)在直接安裝webpack5官網(wǎng)的方法配置入口出口就進行webpack打包,那么還是會報一堆錯誤,這個原因是因為express包是運行在服務(wù)器環(huán)境中的,而webpack打包默認(rèn)采用的是瀏覽器環(huán)境,需要在配置中增加target:"node"這項配置,啟用服務(wù)器端編譯。
之后就可以正常打包了,且在服務(wù)端正常運行。
總結(jié)
到此這篇關(guān)于express搭建的nodejs項目使用webpack進行壓縮打包的文章就介紹到這了,更多相關(guān)express搭建nodejs項目打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你在heroku云平臺上部署Node.js應(yīng)用
heroku是構(gòu)建在AWS之上的一個PaaS云平臺,現(xiàn)在支持Ruby, Node.js, Python, Java, 和 PHP,代碼的部署是通過git進行,編譯和運行都是自動的。2014-07-07
node koa2實現(xiàn)上傳圖片并且同步上傳到七牛云存儲
這篇文章主要介紹了node koa2實現(xiàn)上傳圖片并且同步上傳到七牛云存儲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
Node.js學(xué)習(xí)之內(nèi)置模塊fs用法示例
這篇文章主要介紹了Node.js學(xué)習(xí)之內(nèi)置模塊fs用法,結(jié)合實例形式詳細(xì)分析了node.js內(nèi)置模塊fs的基本功能、用法與相關(guān)操作注意事項,需要的朋友可以參考下2020-01-01
Node.js中使用Log.io在瀏覽器中實時監(jiān)控日志(等同tail -f命令)
這篇文章主要介紹了Node.js中使用Log.io在瀏覽器中實時監(jiān)控日志,Log.io等同于tail -f命令,但更強大,需要的朋友可以參考下2014-09-09
node.js操作mongodb學(xué)習(xí)小結(jié)
這篇文章主要介紹了node.js操作mongodb學(xué)習(xí)小結(jié),本文給出了mongodb創(chuàng)建數(shù)據(jù)庫、插入數(shù)據(jù)以及連接mongodb數(shù)據(jù)庫并查詢數(shù)據(jù)等代碼實例,需要的朋友可以參考下2015-04-04
快速掌握Node.js中setTimeout和setInterval的使用方法
這篇文章主要為大家介紹了快速掌握Node.js中setTimeout和setInterval的使用方法,感興趣的小伙伴們可以參考一下2016-03-03

