精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

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

前言

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

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

另一部分原因是 Node 版本導致的,因為某些包對 Node 版本是有要求的,如果環境不符合要求,也會安裝失敗。

圖片圖片

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

需求梳理

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

能做到這一點的工具有很多,比如 Nodemon[3], PM2[4] 等,我更習慣使用 PM2,PM2 的 watch 特性可以讓我們快速開發調試。

接下來就說說怎么使用 Docker + PM2 搭建一個開發環境。

Docker + PM2 搭建 Node 開發環境

在沒有使用 Docker 之前,我們就是用 PM2 來進行開發和部署 Express 項目的,也算是比較熟悉了,改造起來不會很難。

準備 PM2 配置文件

首先,我們準備一個ecosystem.config.js,這是 PM2 配置文件,不管用不用 Docker 都用得上它。具體配置內容就和原來保持一致即可。

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配置。

Dockerfile for Dev

接著我們還是要寫 Dockerfile,為了和生產環境區分開,我們單獨新建一個 Dockerfile.dev 文件。

ARG NODE_VERSION=16.20.2

FROM node:${NODE_VERSION}-alpine

ENV NODE_ENV development
ENV PORT 8002

WORKDIR /app

RUN npm install pm2-dev -g

RUN --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 ci

EXPOSE 8002

CMD ["npm", "start"]

可以看到,我們通過 RUN 指令安裝了一個 pm2-dev 包,而非 pm2,這是官方推薦我們在 Docker 容器中使用的,pm2-dev 具備 watch 和 restart 特性。

圖片圖片

其中提到的 pm2-runtime 則是用于 Docker 生產環境的。

構建鏡像

構建鏡像總是這樣的千篇一律,唯一的區別是這里用-f指定了 Dockerfile,因為我們要和生產環境的 Dockerfile 區分開。

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

啟動容器

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

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

啟動容器后,就可以測試服務的有效性了,我們隨意測試一個接口。

curl localhost:8002/article/page

圖片圖片

能得到這樣的響應內容,說明服務一切正常。

解決 watch 不生效問題

當我以為萬事大吉時,準備最后測試服務的熱重啟是否正常。

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

我把 article/page 對應的控制器的默認頁碼改為了 3,發現修改代碼后,服務并沒有重啟,curl 的結果毫無變化,這說明 watch 特性沒有生效。

我首先仔細檢查了我的各個配置項,發現都沒有異常,于是就去網上找找有沒有人遇到我這種問題,結果也沒找到。

實在沒辦法,就到 PM2 的 issue 中去搜索 pm2-dev, Docker, watch 這種關鍵詞,確實找到了一些相似的問題。

首先是這位老哥提了個問題,他說使用 pm2-runtime 時能檢測到文件變化自動重啟服務,而 pm2-dev 卻不行。

圖片圖片

這已經是 2020 年提的 issue,我想著我也得留個言,萬一解決了我也好知道。

圖片圖片

但我也知道,這也解決不了問題,我的留言不會馬上得到回復的,于是接著找其他的 issue,翻了好久又找到一個差不多的問題。

圖片圖片

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

小結

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

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

參考資料

[1]vue3-ts-blog-frontend: https://github.com/cumt-robin/vue3-ts-blog-frontend

[2]express-blog-backend: https://github.com/cumt-robin/express-blog-backend

[3]Nodemon: https://nodemon.io/

[4]PM2: https://pm2.keymetrics.io/

[5]Vue3+TS+Node打造個人博客(總覽篇): https://juejin.cn/post/7066966456638013477

責任編輯:武曉燕 來源: 程序員白彬
相關推薦

2011-09-02 14:47:48

Node

2011-11-01 10:30:36

Node.js

2025-07-14 00:40:00

Node.js代碼信號

2021-01-14 10:48:34

Docker CompNode.js開發

2022-02-25 14:42:09

OpenHarmon環境搭建鴻蒙

2011-10-24 16:16:02

Node.js

2022-08-28 16:30:34

Node.jsDocker指令

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2012-09-29 11:13:15

Node.JS前端開發Node.js打包

2021-03-22 08:15:46

國企程序猿事業

2022-06-21 08:52:47

Node.js服務端JavaScript

2023-10-18 08:03:40

2023-09-08 14:12:04

2023-11-08 08:23:28

Node版本

2012-02-06 10:36:04

Node.js

2016-03-07 10:51:02

華為華為合作伙伴伙伴大會

2019-08-05 09:45:19

Node.jsWeb開發前端

2021-09-26 13:21:20

Python微服務JAVA

2020-10-12 08:06:28

HTTP 服務器證書

2020-03-11 14:56:06

蘋果App Store審核
點贊
收藏

51CTO技術棧公眾號

国产清纯白嫩初高中在线观看性色| 日本精品一区二区三区高清 久久| 老司机深夜福利网站| 樱花草涩涩www在线播放| 91免费版在线| 国产成一区二区| 国精产品视频一二二区| 亚洲欧洲日韩精品在线| 一区二区三区成人| 久久av一区二区三区漫画| 狠狠狠狠狠狠狠| 欧美gay男男猛男无套| 欧美一区国产二区| 动漫av网站免费观看| 国产黄在线看| 狠狠网亚洲精品| 91精品成人久久| 国产又黄又粗视频| 麻豆国产一区| 亚洲高清视频中文字幕| 欧美激情一区二区三区在线视频| 亚洲熟妇无码久久精品| 狠狠入ady亚洲精品| 一本色道久久88综合亚洲精品ⅰ| 精品国产鲁一鲁一区二区三区| 久草在线视频资源| 国产午夜精品理论片a级大结局| 国产精品久久电影观看| 久久国产在线观看| 欧洲激情综合| 欧美一区二区三区公司| 北条麻妃在线一区| 蜜臀av国内免费精品久久久夜夜| 久久日韩粉嫩一区二区三区 | 污片视频在线免费观看| 久久色在线观看| 国产精品免费在线| 91麻豆成人精品国产免费网站| 国产一区观看| 一区二区三区亚洲| v天堂中文在线| 婷婷丁香久久| 在线观看91精品国产入口| 青青青在线观看视频| 福利在线午夜| 26uuu欧美日本| 豆国产97在线| 国产情侣自拍小视频| 日韩电影在线观看网站| 91高潮在线观看| 麻豆亚洲av成人无码久久精品| av一区二区高清| 精品无人区太爽高潮在线播放| 原创真实夫妻啪啪av| 麻豆mv在线观看| 一区二区成人在线| 日本黄色播放器| 国产对白叫床清晰在线播放| jiyouzz国产精品久久| 亚洲最大福利视频网| 国产美女www爽爽爽| 午夜在线视频观看日韩17c| 欧美激情精品久久久久久免费印度 | 国产日本欧美一区| 天天干,天天干| 国产欧美日韩综合一区在线播放| 久久99久久久久久久噜噜| 91香蕉视频污在线观看| 91欧美国产| 亚洲精品在线看| 三级黄色片网站| 香蕉精品久久| 亚洲免费电影在线观看| 国产乱了高清露脸对白| 精品三级av| 亚洲色图13p| 国产黄色录像片| 欧美全黄视频| 欧美性视频网站| 伊人久久中文字幕| 韩日精品视频一区| 国产精品免费视频一区二区 | 亚洲久草在线| 精品久久人人做人人爽| 欧美熟妇精品黑人巨大一二三区| av资源久久| 久久伊人精品视频| 国产精品xxxx喷水欧美| 美女脱光内衣内裤视频久久网站 | 欧美日本中文字幕| 国产超碰人人爽人人做人人爱| 免费观看在线色综合| 亚洲影影院av| 日韩av资源站| 亚洲欧美日韩国产另类专区| 妺妺窝人体色777777| 日韩av中字| 日韩欧美国产不卡| 精品人伦一区二区| 在线欧美亚洲| 国产主播欧美精品| 天堂中文在线资| 亚洲视频一二三| 99爱视频在线| 亚洲日本va午夜在线电影| 亚洲精品资源在线| 91成人福利视频| 日韩国产在线一| 成人片在线免费看| 三区四区在线视频| 欧美特级www| 1314成人网| 精品国产精品| 国内精品久久久久久久| 国产又黄又爽视频| 国产女主播在线一区二区| 2019日韩中文字幕mv| 亚洲午夜国产成人| 亚洲欧洲日本专区| 日韩成人一区二区三区| 国产在线一区观看| 亚洲高清视频一区| 国产精品迅雷| 亚洲精品xxxx| 久久久91视频| 国产美女一区二区| 亚洲永久激情精品| 成人国产激情| 亚洲一区二区福利| 中文字幕黄色片| av毛片久久久久**hd| www.好吊操| 视频一区在线| 美女少妇精品视频| 一级黄色片在线播放| 国产女人18毛片水真多成人如厕| 精品视频在线观看一区| av一级亚洲| 欧美国产日韩中文字幕在线| 国产精品视频在线观看免费| 亚洲国产成人在线| 黄色国产小视频| 免费欧美激情| 国产福利视频一区二区| 精品久久久久一区二区三区| 欧美性猛交xxxx乱大交3| 中文字幕无码人妻少妇免费| 亚洲精品黄色| 久久久久久高清| 中文字幕乱码在线播放| 亚洲美女中文字幕| 麻豆成人免费视频| 成人少妇影院yyyy| 超碰人人爱人人| 超碰精品在线观看| 97久久久久久| 深夜福利视频一区| 日本丰满少妇一区二区三区| 国产一级久久久久毛片精品| 日本不卡高清视频| 国产美女视频免费| 亚州一区二区| 久久久久中文字幕| 手机看片福利在线观看| 欧洲一区在线电影| 亚洲区一区二区三| 国产精品一区2区| 亚洲人成无码网站久久99热国产 | 亚洲区免费影片| 免费精品一区二区| 亚洲欧美在线视频| 中文字幕1区2区| 夜久久久久久| 日韩久久久久久久久久久久久| 成人国产综合| 欧美精品制服第一页| 十八禁一区二区三区| 色哟哟一区二区三区| 女同久久另类69精品国产| 国产精品资源站在线| 少妇av一区二区三区无码| 精品久久久久中文字幕小说| 91在线高清视频| 美女搞黄视频在线观看| 永久免费毛片在线播放不卡| 国产精品区在线观看| 亚洲黄网站在线观看| 黄色a一级视频| 精品午夜久久福利影院| 久久久久久人妻一区二区三区| 最新国产一区| 亚洲一区二区三区xxx视频| 女厕盗摄一区二区三区| 色噜噜国产精品视频一区二区| 99精品久久久久久中文字幕| 精品国产乱码久久久久久婷婷| 山东少妇露脸刺激对白在线| 国产精品一二三四五| 国产福利视频在线播放| 亚洲网色网站| 欧洲久久久久久| 91蜜桃臀久久一区二区| 国产精品热视频| 擼擼色在线看观看免费| 欧美精品在线播放| 成人在线高清视频| 亚洲国产日韩欧美在线99| 在线观看日批视频| 欧美性生交大片免网| 欧美人妻精品一区二区三区| 中文字幕欧美国产| 中文字幕日韩三级片| 国产精品自拍三区| 亚洲欧美日韩三级| 日韩主播视频在线| 日本韩国欧美在线观看| 欧美成人嫩草网站| 亚洲精品人成| 久草在线成人| 国内视频一区| 91精品国产自产在线丝袜啪| 国产欧美精品在线播放| 欧美片第一页| 91地址最新发布| 国产丝袜在线播放| 欧美理论电影在线观看| 黄a在线观看| 中文字幕在线观看亚洲| 户外极限露出调教在线视频| 日韩av网站大全| 污污网站在线免费观看| 亚洲成人激情在线观看| 亚洲av无码乱码国产精品久久| 欧美精品久久久久久久久老牛影院 | 荫蒂被男人添免费视频| 国产精品一区二区久久不卡 | 久久精品一区二区三区不卡 | 天天操天天爱天天爽| 免费日韩av片| 久草青青在线观看| 香蕉久久夜色精品| 国产午夜福利在线播放| 国产精品入口66mio| 天天夜碰日日摸日日澡性色av| 精品成人免费| 免费在线观看视频a| 亚洲日本黄色| 国产主播在线看| 亚洲欧美视频| 乱子伦视频在线看| 日韩电影网1区2区| 久久99999| 免费av网站大全久久| 午夜免费看视频| 黄色资源网久久资源365| 亚洲AV无码久久精品国产一区| 国产一区二区三区国产| japan高清日本乱xxxxx| 成人av免费观看| 亚洲国产综合视频| 久久久久久影视| 中国1级黄色片| 亚洲欧美色图小说| 国产成人啪精品午夜在线观看| 午夜在线成人av| 国产黄网在线观看| 欧美久久免费观看| 性欧美18一19性猛交| 亚洲精品国产综合久久| 国产毛片av在线| 久久精品最新地址| 毛片在线导航| 日韩av123| 亚洲精品一区av| 国产欧美日韩一区二区三区| 久久不见久久见国语| 一区二区三区不卡在线| 国内精品久久久久久久影视蜜臀 | 亚洲国产精彩中文乱码av| 日色在线视频| 日韩视频免费在线观看| 国产精品186在线观看在线播放| 91av视频在线| 四虎国产精品成人免费影视| 国产精品yjizz| 国产中文精品久高清在线不| 国产一区一区三区| 母乳一区在线观看| xxx中文字幕| 91蜜桃在线免费视频| 日韩欧美综合视频| 韩曰欧美视频免费观看| 91中文字幕在线播放| 日韩精品久久久久| 黄色一级大片在线免费看产| 91成人国产在线观看| 韩国三级成人在线| 日本一区二区精品视频| 欧美日韩亚洲三区| 美女一区二区三区视频| 99久久综合精品| 在线免费看av网站| 91国内精品野花午夜精品| www.av黄色| 日日骚久久av| 偷拍中文亚洲欧美动漫| 国产精品亚洲不卡a| 97精品国产| 情侣黄网站免费看| www.色综合.com| 亚洲成人生活片| 欧美日韩国产首页| 国产小视频在线| 久久久视频精品| 亚洲一区电影| 黄色网络在线观看| 美女网站一区二区| 精品无码国产污污污免费网站| 亚洲1区2区3区视频| 国产三区在线播放| 日韩在线视频一区| 成人黄色毛片| 亚洲7777| 久久精品观看| 精品人妻少妇嫩草av无码| 亚洲成年人网站在线观看| 99热这里只有精品3| www.午夜精品| japansex久久高清精品| 在线观看成人一级片| 蜜臀国产一区二区三区在线播放| 亚洲精品国产熟女久久久| 欧美午夜无遮挡| 色视频免费在线观看| 97超级碰碰碰| 色天天色综合| 免费毛片小视频| 91麻豆精品一区二区三区| 91香蕉在线视频| 亚洲精品成人久久电影| 美女露胸视频在线观看| 久久久久国产精品视频| 亚洲在线视频| 亚洲精品成人无码| 91电影在线观看| 9色在线视频网站| 国产欧美精品xxxx另类| 97精品一区| 中文字幕乱妇无码av在线| 亚洲女与黑人做爰| 丰满大乳国产精品| 久久久久免费视频| 牛牛视频精品一区二区不卡| 91专区在线观看| 久久精品视频一区二区三区| 精品国产乱子伦| 自拍偷拍亚洲一区| 高清在线一区二区| 日韩一区二区高清视频| a美女胸又www黄视频久久| 亚洲久久在线观看| 国产一区二区三区精品久久久| 日韩国产网站| 久久免费看毛片| 福利电影一区二区三区| 欧美亚洲精品天堂| 在线观看亚洲视频| 日韩成人在线看| 91好吊色国产欧美日韩在线| 久久免费的精品国产v∧| 在线观看中文字幕码| 不卡中文字幕av| 群体交乱之放荡娇妻一区二区| 青青在线视频免费| 亚洲日韩欧美一区二区在线| 国产小视频免费观看| 国产成人精品a视频一区www| 婷婷激情综合| 亚洲婷婷在线观看| 在线精品视频免费观看| a毛片在线观看| 快播亚洲色图| 久久成人久久鬼色| 欧美精品亚洲精品日韩精品| 日韩在线观看免费网站| 韩国女主播一区二区三区| 午夜视频你懂的| 一区二区三区精品在线| 酒色婷婷桃色成人免费av网| 91免费电影网站| 亚洲在线黄色| 免费一级片在线观看| 一本色道久久综合狠狠躁篇的优点| 天堂久久av| 成人性做爰aaa片免费看不忠| 一区二区三区在线观看网站| 国产资源在线看| 国产伦精品一区二区三区四区视频 | 亚洲欧洲色图综合| 香蕉视频网站在线|