精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美亚洲动漫另类| 成人国产精品免费观看动漫| 亚洲天堂av在线免费| 九热视频在线观看| 福利视频在线| 91麻豆6部合集magnet| 国产美女直播视频一区| 免费在线黄色片| 在线日韩一区| 精品少妇一区二区三区日产乱码 | 国产成人精品电影| 国产成人综合在线视频| 最近国产精品视频| 日韩女优av电影| 午夜免费高清视频| 国产伦理精品| 亚洲精品网站在线观看| 日本午夜精品电影| 天堂中文在线资源| 国产乱理伦片在线观看夜一区| 日本久久久久久久| 国产无码精品一区二区| 91精品综合久久久久久久久久久| 日韩精品视频免费专区在线播放| 欧美专区第二页| 中韩乱幕日产无线码一区| 亚洲超碰97人人做人人爱| 中国一区二区三区| 久久精品蜜桃| 99精品视频在线观看| 亚洲一区免费网站| 伊人久久亚洲综合| 日韩高清在线一区| 国语自产精品视频在免费| 天天做夜夜爱爱爱| 999国产精品999久久久久久| 亚洲女人被黑人巨大进入| 99riav国产精品视频| 电影91久久久| 欧美久久久久久久久中文字幕| 男人的天堂99| 看黄在线观看| 激情av一区二区| 亚洲国产精品无码观看久久| 亚洲七七久久综合桃花剧情介绍| 国产精品国产三级国产aⅴ原创 | 欧洲视频在线免费观看| 成人av在线播放网址| 超碰97人人人人人蜜桃| av免费观看在线| 国内久久精品视频| 成人久久18免费网站图片| 国产一区二区三区三州| 狠狠久久亚洲欧美| 91色精品视频在线| 国产日韩欧美视频在线观看| 国产一区二区福利视频| 91在线视频导航| 国产乱色精品成人免费视频| 韩国欧美一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品国产三级国产aⅴ| 激情文学综合插| 97久久人人超碰caoprom欧美| 99国产精品久久久久久久成人| 精品一区二区日韩| 亚洲自拍偷拍一区| 粉嫩小泬无遮挡久久久久久| 9i在线看片成人免费| 美国av一区二区三区| 欧美精品a∨在线观看不卡| 久久久激情视频| 久久免费看毛片| 伊人影院在线视频| 精品久久久久久久久久久久久久| 成年人视频网站免费观看| 欧美xnxx| 日韩一区二区在线观看视频 | 免费看又黄又无码的网站| 黄色漫画在线免费看| 色综合久久久久综合| 中文字幕第80页| 久久国产精品美女| 亚洲精品电影久久久| 日韩毛片无码永久免费看| 999久久久91| 久久久久久网站| 69xxxx国产| 国产精品自在在线| 免费不卡亚洲欧美| 国产网站在线免费观看| 亚洲 欧美综合在线网络| 欧美激情精品久久久久久小说| 亚洲欧美综合久久久久久v动漫| 欧美变态tickle挠乳网站| 日本一区二区三区网站| 国产精品传媒精东影业在线| 91国产中文字幕| 国产又黄又爽视频| 久久综合色播五月| 欧美性受黑人性爽| 成人免费短视频| 日韩午夜中文字幕| 蜜桃无码一区二区三区| 欧美精选一区| 国产精品免费观看在线| 色呦呦免费观看| 亚洲丝袜制服诱惑| 免费男同深夜夜行网站| 亚洲超碰在线观看| 国产一区二区三区中文| 国产一级视频在线| 精品一区二区三区av| 欧美亚洲丝袜| freexxx性亚洲精品| 欧美精品乱码久久久久久| 全黄一级裸体片| 亚洲视频中文| 91九色露脸| 麻豆传媒在线免费看| 91福利国产成人精品照片| 亚洲高清无码久久| 欧美~级网站不卡| 国产美女被下药99| 邻居大乳一区二区三区| 五月婷婷色综合| 中文字幕1区2区| 亚洲午夜精品一区 二区 三区| 国产91在线播放九色快色| 日批免费在线观看| 亚洲影视在线播放| 国产亚洲色婷婷久久| 国产精品99久久| 国产精品青草久久久久福利99| 午夜av免费在线观看| 亚洲宅男天堂在线观看无病毒| 中文字幕一区久久| 欧美第一精品| 成人黄色午夜影院| 免费在线观看av| 欧美三电影在线| 欧美成人久久久免费播放| 日韩中文字幕麻豆| 欧美一区二区在线视频观看| 日韩深夜视频| 亚洲欧美激情一区| 波多野结衣啪啪| 久久青草欧美一区二区三区| 黄色一级在线视频| 欧美日韩一区二区三区不卡视频| 久久久久中文字幕2018| 乱色精品无码一区二区国产盗| 一区二区激情视频| 日韩高清一二三区| 亚洲国产日本| 久久亚洲精品欧美| 日韩电影大全网站| 永久免费毛片在线播放不卡 | 中文在线аv在线| 亚洲黄页视频免费观看| 黄色片网站在线免费观看| 久久精品欧美日韩| 欧美成人三级在线播放| 911精品美国片911久久久| 99久热re在线精品视频| 91高清视频在线观看| 亚洲精品在线91| 免费在线不卡av| 亚洲色图.com| 精品无码人妻少妇久久久久久| 日韩图片一区| 日韩欧美一区二区在线观看| 日韩亚洲国产免费| 欧美国产日韩一区二区| 四虎永久在线精品免费网址| 欧亚一区二区三区| 黄视频网站免费看| kk眼镜猥琐国模调教系列一区二区| www.四虎成人| 999久久久亚洲| 国产不卡一区二区在线观看| 日韩激情电影免费看| 日韩小视频在线| 好吊色视频一区二区| 色婷婷综合久久久| 一区二区视频免费看| 久久综合网色—综合色88| 夜夜夜夜夜夜操| 99在线精品视频在线观看| 亚洲国产欧美日韩| japanese色系久久精品| 国产精品视频久久久久| segui88久久综合| 中文字幕日韩精品在线| 天天操天天干天天爽| 欧美日本乱大交xxxxx| 韩国av免费观看| 中文字幕一区三区| 人妻少妇精品视频一区二区三区| 麻豆精品视频在线| 成人一对一视频| 天天插综合网| 久久综合久久久| 日本一区二区三区视频在线看| 日韩av电影手机在线| 羞羞视频在线免费国产| 一区二区亚洲精品国产| 人人妻人人澡人人爽久久av | 亚洲一区二区三区国产| wwwww黄色| 91免费小视频| 日本美女视频网站| 精品一区二区三区视频| 日本999视频| 国产欧美日韩一区二区三区在线| 四虎免费在线观看视频| 日本欧美肥老太交大片| 精品国产乱码一区二区三区四区| 国产精品一级在线观看| 国产精品美女主播| 色香欲www7777综合网| 97免费视频在线播放| 亚洲大胆人体大胆做受1| www国产精品视频| shkd中文字幕久久在线观看| 日韩av在线免费观看| 午夜精品久久久久久久99热黄桃| 欧美日韩一卡二卡| 欧美性受xxx黑人xyx性爽| 黑人巨大精品欧美一区二区免费| 日本亚洲欧美在线| 亚洲一区二区三区四区中文字幕 | 高清美女视频一区| 亚洲精品www| 欧美 日韩 人妻 高清 中文| 日韩免费观看高清完整版| a天堂在线观看视频| 欧美精品三级日韩久久| 国产又粗又猛又爽又黄视频| 欧美天堂亚洲电影院在线播放| 亚洲av人无码激艳猛片服务器| 日韩欧美国产视频| 日韩久久中文字幕| 欧美性猛交xxxx免费看漫画 | 制服丝袜亚洲精品中文字幕| 在线观看毛片网站| 欧美老人xxxx18| 国产人妖一区二区| 精品国产一区二区三区四区四 | 91免费观看国产| 添女人荫蒂视频| 久久色在线观看| 久久精品国产亚洲av久| 久久精品亚洲国产奇米99| 成人在线一级片| 国产精品私人影院| 国产午夜手机精彩视频| 亚洲精品成人悠悠色影视| 免费无遮挡无码永久在线观看视频| 一区二区成人在线视频| 日本少妇激情舌吻| 欧美视频中文字幕在线| 日韩欧美国产另类| 欧美女孩性生活视频| 性少妇videosexfreexxx片| 欧美sm美女调教| 欧美69xxxxx| 精品国模在线视频| 亚洲大胆人体大胆做受1| 97久久久免费福利网址| 亚洲天堂1区| 97视频资源在线观看| 日韩高清三区| 亚洲综合网中心| 黄色一区二区三区四区| 少妇性l交大片| 国产美女娇喘av呻吟久久| 91丝袜在线观看| 欧美国产一区二区| 久久久精品视频免费观看| 午夜av电影一区| 亚洲一区二区激情| 精品日韩一区二区三区| 国产视频福利在线| 欧美人与性动交a欧美精品| 自拍偷拍亚洲视频| 成人激情在线观看| 日本妇女一区| 亚洲区成人777777精品| 午夜在线视频观看日韩17c| 奇米视频888| 91视视频在线观看入口直接观看www| 亚洲黄色网址大全| 亚洲成精国产精品女| 中文字幕在线观看高清| 亚洲国产精彩中文乱码av| 国产福利第一视频在线播放| 欧美激情综合色综合啪啪五月| 91tv亚洲精品香蕉国产一区| 国产精品制服诱惑| 欧美a级成人淫片免费看| 大陆极品少妇内射aaaaa| 激情欧美一区二区| 国产免费无遮挡吸奶头视频| 一区二区三区不卡视频在线观看| 一级黄色在线观看| 日韩成人av在线播放| 99在线播放| 国产女人精品视频| 亚州综合一区| 岛国大片在线播放| 国产乱国产乱300精品| 亚洲色图日韩精品| 色哟哟在线观看一区二区三区| www.成人免费视频| 在线观看不卡av| 自拍视频在线看| 精品欧美国产| 影音先锋中文字幕一区| 小早川怜子一区二区三区| 国产婷婷色一区二区三区四区| 日本一区二区三区四区五区| 日韩一区二区三区视频在线观看| 在线免费观看黄色网址| 日韩av免费在线观看| 啪啪国产精品| a级免费在线观看| 国产成人免费视频网站| 午夜激情福利网| 欧美一区二区在线观看| 亚洲搞黄视频| 国产精自产拍久久久久久| 成人3d动漫在线观看| 成人精品视频一区二区| 26uuu久久综合| 国产精品久久久久久久妇| 亚洲精品大尺度| 新版的欧美在线视频| 精品欧美国产| 久久久久久自在自线| 在线免费观看麻豆| 一本大道久久a久久精品综合| 先锋av资源站| 欧洲美女7788成人免费视频| 亚洲尤物av| www日韩在线观看| 日本一区二区动态图| 在线观看不卡的av| 久久久精品一区二区| 欧美一区在线观看视频| 91午夜在线观看| www.av精品| 永久免费无码av网站在线观看| 亚洲人永久免费| 高清av一区| 裸体大乳女做爰69| 国产**成人网毛片九色| 日本三级理论片| 亚洲性猛交xxxxwww| 久久国内精品| 亚洲小视频在线播放| 懂色一区二区三区免费观看| 国产午夜免费视频| 亚洲欧美在线看| 另类一区二区| 91成人综合网| 久久久亚洲综合| 国产又粗又猛又爽又黄视频 | 精品成人久久久| 亚洲日本aⅴ片在线观看香蕉| 99只有精品| 国产玉足脚交久久欧美| 久久看人人爽人人| 在线观看毛片视频| 国内免费精品永久在线视频| 九九热爱视频精品视频| 亚洲精品mv在线观看| 欧美日韩精品二区| eeuss影院在线播放| 成人免费91在线看| 久久这里只有| 欧美成人免费观看视频| 精品视频在线播放免| 欧美成人家庭影院| 成人在线观看你懂的| 国产精品色婷婷久久58| 亚洲第一天堂在线观看| 国产999精品视频| 欧美激情第8页| 亚洲一区视频在线播放| 日韩欧美在线不卡| 色8久久影院午夜场| 亚洲国产精品无码av| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲精品一区二区三区区别| 国产精品视频地址| 亚洲视频大全| 放荡的美妇在线播放| 在线看片第一页欧美| 欧美调教网站|