日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

使用 Docker 搭建 NodeJS 開發環境是一種什么體驗?

來源: 責編: 時間:2024-07-12 17:22:01 230觀看
導讀前言最近和一些小伙伴在溝通這個博客全棧項目時,會發現其中一些朋友在安裝依賴這個階段就出現問題了,總是會問我“為什么依賴安裝失???”這個問題可能是前端或者 node 領域最常見的問題了,基本上每個人都遇到過,拉取一個項

前言

最近和一些小伙伴在溝通這個博客全棧項目時,會發現其中一些朋友在安裝依賴這個階段就出現問題了,總是會問我“為什么依賴安裝失?。俊边@個問題可能是前端或者 node 領域最常見的問題了,基本上每個人都遇到過,拉取一個項目后,依賴都裝不成功,何談繼續使用呢?FQc28資訊網——每日最新資訊28at.com

依賴安裝階段就失敗,一部分原因來自于依賴版本鎖的寬松性,很多時候我們不會鎖死一個依賴的版本號,而是會采用^, ~ 這種范圍限制,這就會導致在npm install的時候,可能會嘗試去安裝一個更高版本的依賴,而這個更高版本的依賴可能會帶來它的一些依賴項的兼容性問題,引起安裝階段報錯。FQc28資訊網——每日最新資訊28at.com

另一部分原因是 Node 版本導致的,因為某些包對 Node 版本是有要求的,如果環境不符合要求,也會安裝失敗。FQc28資訊網——每日最新資訊28at.com

圖片圖片FQc28資訊網——每日最新資訊28at.com

想要解決這類問題,最好的辦法就是使用容器化完全隔離環境,因為我們可以在 Dockerfile 中指定項目需要的運行環境,這樣一來,使用者的主機環境是什么 Node 版本大可不必操心。在上一篇文章中,我們學會了使用 Docker 構建 NodeJS Express 鏡像并自動化部署生產環境使用,但是開發環境的問題我們還未解決掉,本文就來學習一下怎么使用 Docker 構建 NodeJS 開發環境。FQc28資訊網——每日最新資訊28at.com

需求梳理

我們很清楚,開發環境下,最重要的一點是什么,那就是修改了代碼,能夠立即生效,方便快速調試,這種熱更新或者自動重啟能力是至關重要的。FQc28資訊網——每日最新資訊28at.com

能做到這一點的工具有很多,比如 Nodemon[3], PM2[4] 等,我更習慣使用 PM2,PM2 的 watch 特性可以讓我們快速開發調試。FQc28資訊網——每日最新資訊28at.com

接下來就說說怎么使用 Docker + PM2 搭建一個開發環境。FQc28資訊網——每日最新資訊28at.com

Docker + PM2 搭建 Node 開發環境

在沒有使用 Docker 之前,我們就是用 PM2 來進行開發和部署 Express 項目的,也算是比較熟悉了,改造起來不會很難。FQc28資訊網——每日最新資訊28at.com

準備 PM2 配置文件

首先,我們準備一個ecosystem.config.js,這是 PM2 配置文件,不管用不用 Docker 都用得上它。具體配置內容就和原來保持一致即可。FQc28資訊網——每日最新資訊28at.com

module.exports = {    apps: [        {            // 應用名            name: 'blog',            // 啟動腳本            script: 'app.js',            // –env參數指定運行的環境            env: {                NODE_ENV: "development",                PORT: 8002,            },            watch: true,            ignore_watch: ["node_modules", ".git", ".github", '.gitignore', '.dockerignore', '.release-it.cjs', '*.md'],        }    ],};

我們開啟了watch配置,這樣就可以做到修改源碼立即重啟服務。當然,我們也不能隨便修改什么文件就重啟服務,比如一些 ignore 文件,markdown 文件,修改了之后也不應該重啟服務,這就需要用到ignore_watch配置。FQc28資訊網——每日最新資訊28at.com

Dockerfile for Dev

接著我們還是要寫 Dockerfile,為了和生產環境區分開,我們單獨新建一個 Dockerfile.dev 文件。FQc28資訊網——每日最新資訊28at.com

ARG NODE_VERSION=16.20.2FROM node:${NODE_VERSION}-alpineENV NODE_ENV developmentENV PORT 8002WORKDIR /appRUN npm install pm2-dev -gRUN --mount=type=bind,source=package.json,target=package.json /    --mount=type=bind,source=package-lock.json,target=package-lock.json /    --mount=type=cache,target=/root/.npm /    npm ciEXPOSE 8002CMD ["npm", "start"]

可以看到,我們通過 RUN 指令安裝了一個 pm2-dev 包,而非 pm2,這是官方推薦我們在 Docker 容器中使用的,pm2-dev 具備 watch 和 restart 特性。FQc28資訊網——每日最新資訊28at.com

圖片圖片FQc28資訊網——每日最新資訊28at.com

其中提到的 pm2-runtime 則是用于 Docker 生產環境的。FQc28資訊網——每日最新資訊28at.com

構建鏡像

構建鏡像總是這樣的千篇一律,唯一的區別是這里用-f指定了 Dockerfile,因為我們要和生產環境的 Dockerfile 區分開。FQc28資訊網——每日最新資訊28at.com

docker build -f Dockerfile.dev -t blog-express-dev .

啟動容器

由于我們希望在啟動容器后,還能利用 PM2 的 watch 特性做到修改源碼后自動重啟服務,這就必須把我們的源碼作為 Volume 掛載到容器中。所以 docker run 大概要這樣寫:FQc28資訊網——每日最新資訊28at.com

docker run -dp 8002:8002 /--mount type=bind,source=${PWD},target=/app /--name blog-backend-dev /blog-express-dev

啟動容器后,就可以測試服務的有效性了,我們隨意測試一個接口。FQc28資訊網——每日最新資訊28at.com

curl localhost:8002/article/page

圖片圖片FQc28資訊網——每日最新資訊28at.com

能得到這樣的響應內容,說明服務一切正常。FQc28資訊網——每日最新資訊28at.com

解決 watch 不生效問題

當我以為萬事大吉時,準備最后測試服務的熱重啟是否正常。FQc28資訊網——每日最新資訊28at.com

- const pageNo = Number(req.query.pageNo || 1);+ const pageNo = Number(req.query.pageNo || 3);

我把 article/page 對應的控制器的默認頁碼改為了 3,發現修改代碼后,服務并沒有重啟,curl 的結果毫無變化,這說明 watch 特性沒有生效。FQc28資訊網——每日最新資訊28at.com

我首先仔細檢查了我的各個配置項,發現都沒有異常,于是就去網上找找有沒有人遇到我這種問題,結果也沒找到。FQc28資訊網——每日最新資訊28at.com

實在沒辦法,就到 PM2 的 issue 中去搜索 pm2-dev, Docker, watch 這種關鍵詞,確實找到了一些相似的問題。FQc28資訊網——每日最新資訊28at.com

首先是這位老哥提了個問題,他說使用 pm2-runtime 時能檢測到文件變化自動重啟服務,而 pm2-dev 卻不行。FQc28資訊網——每日最新資訊28at.com

圖片圖片FQc28資訊網——每日最新資訊28at.com

這已經是 2020 年提的 issue,我想著我也得留個言,萬一解決了我也好知道。FQc28資訊網——每日最新資訊28at.com

圖片圖片FQc28資訊網——每日最新資訊28at.com

但我也知道,這也解決不了問題,我的留言不會馬上得到回復的,于是接著找其他的 issue,翻了好久又找到一個差不多的問題。FQc28資訊網——每日最新資訊28at.com

圖片圖片FQc28資訊網——每日最新資訊28at.com

雖然這里面說的是在 Mac 上遇到這個問題,但是我想著我也得試試,于是加了usePolling重新打鏡像運行容器,結果還真的好了,修改源碼能夠立刻生效,開發環境最關鍵的問題解決了!FQc28資訊網——每日最新資訊28at.com

小結

做一件事情,最怕的就是關鍵地方掉鏈子,功虧一簣,最欣喜的也是解決掉問題的那一刻,雖然我知道解決完一個問題還會有下一個棘手的問題等著我,但是不礙事,做程序就是這樣,山重水復疑無路,柳暗花明又一村,人生亦如此!FQc28資訊網——每日最新資訊28at.com

  • 開源地址:vue3-ts-blog-frontend[1]
  • 專欄導航:Vue3+TS+Node打造個人博客(總覽篇)[5]

參考資料FQc28資訊網——每日最新資訊28at.com

[1]vue3-ts-blog-frontend: https://github.com/cumt-robin/vue3-ts-blog-frontendFQc28資訊網——每日最新資訊28at.com

[2]express-blog-backend: https://github.com/cumt-robin/express-blog-backendFQc28資訊網——每日最新資訊28at.com

[3]Nodemon: https://nodemon.io/FQc28資訊網——每日最新資訊28at.com

[4]PM2: https://pm2.keymetrics.io/FQc28資訊網——每日最新資訊28at.com

[5]Vue3+TS+Node打造個人博客(總覽篇): https://juejin.cn/post/7066966456638013477FQc28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-100715-0.html使用 Docker 搭建 NodeJS 開發環境是一種什么體驗?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 中的 @wraps 到底是個啥東西?

下一篇: 通用詳情頁的打造,你學會了嗎?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品日韩精品欧美精品| 欧美承认网站| 亚洲视频在线看| 亚洲一区3d动漫同人无遮挡| 欧美一级理论性理论a| 久久久久久久91| 欧美风情在线| 国产精品露脸自拍| 好吊色欧美一区二区三区视频| 激情五月***国产精品| 亚洲三级观看| 香蕉成人啪国产精品视频综合网| 久久九九久久九九| 欧美黄色免费| 国产精品一区二区在线观看| 精品成人一区二区三区| 99这里只有精品| 久久国产婷婷国产香蕉| 欧美精品一卡二卡| 国产欧美在线| 亚洲精品国产无天堂网2021| 欧美在线视频一区二区| 欧美精品九九| 国产综合久久久久久| 日韩一二三区视频| 久久国产黑丝| 欧美色大人视频| 一区二区三区在线免费播放| 亚洲视频一区二区| 免费一级欧美片在线播放| 国产精品日韩精品欧美精品| 亚洲国产成人精品女人久久久| 国产精品99久久久久久久久| 久久免费视频网| 国产精品老牛| 99re国产精品| 久久亚洲精品欧美| 国产伦精品一区二区三区免费迷| 亚洲日韩视频| 久久免费少妇高潮久久精品99| 国产精品mv在线观看| 亚洲国产成人在线播放| 欧美一级久久久久久久大片| 欧美日韩一区综合| 亚洲国产专区| 久久婷婷丁香| 国产日韩欧美在线播放| 中文在线资源观看视频网站免费不卡| 狼人天天伊人久久| 国产麻豆精品theporn| av成人天堂| 欧美二区乱c少妇| 韩国三级电影久久久久久| 亚洲综合视频在线| 欧美日本国产一区| 亚洲国产精品一区二区尤物区| 欧美在线免费观看视频| 国产精品久久久久久久午夜| 日韩视频免费观看高清在线视频| 久久久久久自在自线| 国产欧美亚洲精品| 亚洲自拍都市欧美小说| 欧美日韩亚洲一区二区三区在线 | 国产精品久久一区二区三区| 最新日韩精品| 老司机免费视频久久| 国产在线高清精品| 欧美在线中文字幕| 国产日韩欧美精品一区| 午夜精品一区二区三区四区| 国产精品国产精品国产专区不蜜| 在线一区欧美| 欧美三级小说| 亚洲图片欧美日产| 国产精品成人v| 亚洲无玛一区| 国产精品久久久久久久久婷婷| 亚洲桃色在线一区| 欧美午夜一区二区| 亚洲一区在线直播| 国产精品无码永久免费888| 亚洲少妇最新在线视频| 欧美三级小说| 亚洲一区二区三区欧美| 国产精品久久久久久亚洲毛片| 亚洲午夜精品一区二区三区他趣| 国产精品白丝jk黑袜喷水| 亚洲一区二区精品| 国产精品一区2区| 欧美一区二区大片| 国内精品久久久久久 | 欧美激情91| 99国产精品久久久久久久久久| 欧美日本不卡| 中日韩视频在线观看| 国产精品v欧美精品∨日韩| 中文在线资源观看视频网站免费不卡| 欧美日韩一区二区三区在线视频| 亚洲视频电影图片偷拍一区| 国产精品毛片在线| 性亚洲最疯狂xxxx高清| 国产欧美日韩另类视频免费观看 | 久久精品国产一区二区三区免费看 | 国产精品久久7| 欧美一区二区三区成人| 国产一区视频在线观看免费| 久久性天堂网| 亚洲三级视频在线观看| 欧美日韩一区在线视频| 性xx色xx综合久久久xx| 狠狠网亚洲精品| 欧美成人亚洲成人| 亚洲天堂av综合网| 国产夜色精品一区二区av| 久久亚洲精品伦理| a4yy欧美一区二区三区| 国产精品视频免费在线观看| 久久久国产视频91| 亚洲精品日本| 国产精品视频最多的网站| 久久免费精品日本久久中文字幕| 亚洲毛片av在线| 国产麻豆精品久久一二三| 另类人畜视频在线| 中文在线资源观看网站视频免费不卡| 国产欧美日韩不卡免费| 免费看精品久久片| 亚洲综合欧美| 亚洲大片av| 欧美午夜不卡影院在线观看完整版免费| 亚洲一区不卡| 亚洲电影免费观看高清完整版在线观看| 欧美精品二区三区四区免费看视频| 亚洲专区在线| 国产综合色在线视频区| 欧美另类视频| 欧美一区深夜视频| 亚洲精品国产精品乱码不99| 国产精品一区二区女厕厕| 免费看的黄色欧美网站| 亚洲午夜女主播在线直播| 精品动漫av| 欧美视频中文一区二区三区在线观看| 午夜国产精品影院在线观看| 亚洲国产精品久久久久久女王| 国产精品国产馆在线真实露脸| 另类图片综合电影| 亚洲欧美一区二区三区极速播放 | 国产精品mm| 女女同性精品视频| 午夜伦理片一区| 亚洲精品美女| 精品成人一区二区| 国产精品美女久久久久久免费 | 国产一区二区三区在线观看免费视频 | 麻豆av一区二区三区| 亚洲欧美日韩在线不卡| 亚洲欧洲日产国产综合网| 国产日韩亚洲| 国产精品国产一区二区| 欧美黑人在线播放| 久久久久久久久久码影片| 亚洲已满18点击进入久久| 亚洲人精品午夜在线观看| 国产一区av在线| 欧美午夜视频| 欧美黑人在线播放| 久久精品一区二区三区不卡牛牛 | 欧美另类极品videosbest最新版本 | 亚洲第一精品电影| 国产精品免费一区豆花| 欧美欧美天天天天操| 久久先锋影音| 欧美专区在线播放| 亚洲欧美精品在线| 一区二区欧美精品| 亚洲精品久久久久久一区二区| 一区二区三区在线观看欧美| 国产美女精品| 国产精品萝li| 国产精品免费看片| 国产精品二区影院| 欧美日韩在线第一页| 欧美喷水视频| 欧美另类69精品久久久久9999| 欧美成人在线免费视频| 毛片av中文字幕一区二区| 久久久在线视频| 久久久综合精品| 久久精品中文| 亚洲一区二区精品在线| 99re热这里只有精品视频| 亚洲黄色一区| 亚洲国内自拍| 亚洲国产综合在线| 亚洲激情影视| 亚洲人成毛片在线播放女女| 在线看欧美视频| 在线播放中文字幕一区| 韩国免费一区| 影音先锋中文字幕一区二区| 国内精品一区二区| 狠色狠色综合久久| 在线观看欧美精品|