中午,接到朋友有一個需求,想用node寫一個服務,將word文檔轉換為html。
為什么不用java呢?我問到(畢竟他后端語言用的是java)。
他說他找到的幾個第三方插件都不是特別符合,轉換后總有一些問題。
他找到了一個前端的本地轉換的插件,比較符合他的要求。
但是是純前端的本地轉換,上傳文件然后轉換那種。
所以他問我能不能把這個用node寫成后端服務。
我也剛好挺感興趣的,就動手做了起來。
網上參考了各路大神意見,都說nestJs還不錯,比較像spring,
剛好我也對spring比較熟悉,折騰了半個小時,搭建nestJs項目,
寫controller,service,代碼寫完了,刪掉多余的console.log,
我自己寫的總共不到10行代碼。
controller
service
本地測試,基本沒什么問題。大功告成,准備部署!
運行npm run build,將dist目錄復制到服務器,
服務器安裝nodeJS, 安裝pm2, 用pm2 來啟動dist目錄下的main.js
然后打開瀏覽器訪問,發現服務沒有啟動成功 ???
用pm2查看日志,大概說是沒有找到nest/core模塊。
仔細看一下dist目錄,很快發現了異常,
目錄中只有幾個普通的js文件,那些依賴文件呢 ?
回頭看本地的dist文件夾,打包出來的dist 目錄只有300多k。
用過npm的前端都知道,dist文件夾一般都不會這么小,一般一個項目里面會有各種依賴。
那依賴去哪里了呢? 我打包的方法不對 ? 仔細看package.json。確實沒有其他build方法啊。
百度google一陣搜索nestJs打包,大家都告訴我npm run build。。。。
莫非是我build設置有問題 ? 看了好幾遍 tsconfig.build.json,
不懂的配置都去查一下,好像沒什么問題啊。
等等,dist目錄下好像有一個tsconfig.build.tsbuildInfo文件。
打開看看,
里面是相關依賴的指向位置,我忽然理解了什么。
可是這不是我想要的,我不想要指向位置!我想要把依賴打包進去。
又是google一陣搜索(百度已經搜不到相關資料了)。
去nestJs的github的issue里面找了半天,還真是找不到相關資料。
難道全世界只有我一個遇到這個問題? 什么垃圾nestJs,我再也不想用了。
准備放棄,又舍不得沉沒成本。。。
又一遍遍的回想之前的問題,想到依賴指向位置的時候,忽然靈光一閃
如果,我在服務器上打包呢? 那指向的位置不就正確了嗎!!!!
說做就做,將整個項目除了node_module和dist目錄,其他都放到服務器
運行npm install,運行npm run build,進入dist目錄,運行node main.js
瀏覽器訪問,果然成功了。
開心!!!
后記:雖然打包部署成功了,回想這次折騰這么久的經歷,主要問題在於
根據我以前的經驗,打包一般都會把依賴打進去,然后生成一個單獨的包用來部署。
這nestJs卻好像不行,那如果是要部署到一台沒有聯網的電腦呢?
又或者確實有將依賴打入dist目錄的方法?