国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用 Docker 搭建 Node.JS 開發(fā)環(huán)境是一種什么體驗?

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

前言

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

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

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

圖片圖片

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

需求梳理

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

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

接下來就說說怎么使用 Docker + PM2 搭建一個開發(fā)環(huán)境。

Docker + PM2 搭建 Node 開發(fā)環(huán)境

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

準(zhǔn)備 PM2 配置文件

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

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

我們開啟了watch配置,這樣就可以做到修改源碼立即重啟服務(wù)。當(dāng)然,我們也不能隨便修改什么文件就重啟服務(wù),比如一些 ignore 文件,markdown 文件,修改了之后也不應(yīng)該重啟服務(wù),這就需要用到ignore_watch配置。

Dockerfile for Dev

接著我們還是要寫 Dockerfile,為了和生產(chǎn)環(huán)境區(qū)分開,我們單獨新建一個 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 生產(chǎn)環(huán)境的。

構(gòu)建鏡像

構(gòu)建鏡像總是這樣的千篇一律,唯一的區(qū)別是這里用-f指定了 Dockerfile,因為我們要和生產(chǎn)環(huán)境的 Dockerfile 區(qū)分開。

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

啟動容器

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

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

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

curl localhost:8002/article/page

圖片圖片

能得到這樣的響應(yīng)內(nèi)容,說明服務(wù)一切正常。

解決 watch 不生效問題

當(dāng)我以為萬事大吉時,準(zhǔn)備最后測試服務(wù)的熱重啟是否正常。

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

我把 article/page 對應(yīng)的控制器的默認(rèn)頁碼改為了 3,發(fā)現(xiàn)修改代碼后,服務(wù)并沒有重啟,curl 的結(jié)果毫無變化,這說明 watch 特性沒有生效。

我首先仔細(xì)檢查了我的各個配置項,發(fā)現(xiàn)都沒有異常,于是就去網(wǎng)上找找有沒有人遇到我這種問題,結(jié)果也沒找到。

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

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

圖片圖片

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

圖片圖片

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

圖片圖片

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

小結(jié)

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

  • 開源地址:vue3-ts-blog-frontend[1]
  • 專欄導(dǎo)航: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

責(zé)任編輯:武曉燕 來源: 程序員白彬
相關(guān)推薦

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開發(fā)

2022-02-25 14:42:09

OpenHarmon環(huán)境搭建鴻蒙

2011-10-24 16:16:02

Node.js

2022-08-28 16:30:34

Node.jsDocker指令

2015-03-10 10:59:18

Node.js開發(fā)指南基礎(chǔ)介紹

2012-09-29 11:13:15

Node.JS前端開發(fā)Node.js打包

2021-03-22 08:15:46

國企程序猿事業(yè)

2022-06-21 08:52:47

Node.js服務(wù)端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開發(fā)前端

2021-09-26 13:21:20

Python微服務(wù)JAVA

2020-03-11 14:56:06

蘋果App Store審核

2020-10-12 08:06:28

HTTP 服務(wù)器證書
點贊
收藏

51CTO技術(shù)棧公眾號

欧美第一精品| 久久综合亚洲| 国产999精品久久久久久绿帽| 国产午夜一区| 国产精品久久免费看| 欧美13videosex性极品| 99国产在线视频| 一级日本不卡的影视| 狠狠一区二区三区| 成人在线观看a| 久久精品免费电影| 国产aⅴ综合色| 怡红院成人在线| 日韩视频在线免费播放| 亚洲韩国日本中文字幕| 麻豆成人综合网| 国产在线看片免费视频在线观看| 日韩免费三级| 精品久久久三级丝袜| 久久一区中文字幕| 密臀av在线| 伊人色综合久久天天五月婷| 精品国产区一区| 美女视频一区二区三区| 啊啊啊久久久| 欧洲美女和动交zoz0z| 日韩vs国产vs欧美| 日韩高清一区在线| 欧美熟乱15p| 国产乱码精品一区二区三区中文| 成人免费乱码大片a毛片软件| 热这里只有精品| 国产午夜精品久久久久久免费视| 青青伊人久久| 欧美日韩大尺度| 91高清视频免费| 久久狠狠久久| 国产精品啊啊啊| 亚洲婷婷免费| 成人台湾亚洲精品一区二区 | 女人色偷偷aa久久天堂| 精品视频高潮| 婷婷精品进入| 国产伦精品一区二区三区免费迷| 久久久久久久久久久久久久久久久久久| 91精品国产高清久久久久久91| 国产精品久久网站| 小处雏高清一区二区三区| 婷婷在线视频| 亚洲午夜在线观看| 久久精品国产亚洲精品| 亚洲欧美在线另类| 欧美在线看片| 国产激情在线播放| 极品美女扒开粉嫩小泬| 欧美在线播放视频| 日本大香伊一区二区三区| 丝袜诱惑亚洲看片| 日本一区二区三区中文字幕| 麻豆免费网站| 欧美精品一区二区三区久久| 一本色道久久综合狠狠躁篇怎么玩| 国产视频不卡一区| 永久亚洲成a人片777777| 男插女视频久久久| 日本毛片在线免费观看| 国产精品91久久久久久| 在线综合+亚洲+欧美中文字幕| 国产69精品久久久久777| 窝窝社区一区二区| 在线看黄色av| 日韩精品视频在线免费观看| 91大神福利视频在线| 精品日本一区二区三区在线观看| 精品视频一区三区九区| 国产一区二区在线视频| 久久最新网址| av资源网在线播放| 午夜国产一区二区三区| 国产美女99p| 久久精品最新地址| 日本久久一区二区三区| 成人国产在线观看| 91精品一区国产高清在线gif| 中文字幕资源网在线观看免费| 成年人在线免费观看视频网站| 欧美系列一区| 69久久夜色精品国产69乱青草| 日韩欧美高清dvd碟片| 日韩一区在线播放| 日日欢夜夜爽一区| 国产精品一在线观看| 亚洲欧美一区二区三区| 中文产幕区在线观看| 六月婷婷激情综合| 99精品欧美一区二区三区| 超薄丝袜一区二区| 欧美一区二区女人| 成人欧美一区二区三区小说 | 搡老女人一区二区三区视频tv| 91香蕉视频导航| 国产69精品久久久久9999| 超碰在线免费| 四虎av在线| 国产精品久久九九| 中文字幕日韩欧美| 欧美日韩中文另类| 中文文精品字幕一区二区| 久久一区二区三区超碰国产精品| 久久99久久人婷婷精品综合| 综合在线影院| 久久97久久97精品免视看| 四虎永久在线高清国产精品| 成人mm视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 91麻豆精品国产| 成人在线观看黄| 99久久无色码| 精品免费一区二区三区| 黄色一级大片在线观看| 91精品国产调教在线观看| 欧美日韩一区成人| 国产精品高潮在线| 撸视在线观看免费视频| 好看的亚洲午夜视频在线| 亚洲伦在线观看| 欧美激情网站在线观看| 五月天av在线播放| 精品69视频一区二区三区Q| 在线观看精品一区| 99久久精品免费看国产四区| 日韩另类在线| 亚洲一区中文| 日韩在线观看免费高清完整版| 精品人伦一区二区三区| 传媒av在线| 欧美成人一区在线观看| 亚洲综合激情网| 欧美日韩综合网| 性视频在线播放| 高清一区二区中文字幕| 欧美国产综合| 亚洲欧美日韩精品久久久久| 国产精品久久久久久久美男| 日本不卡三区| 精品一区二区免费在线观看| 午夜久久久影院| 1769国产精品| 一本到av在线| 中文久久乱码一区二区| 成人免费在线网址| 欧美最顶级a∨艳星| 日韩成人18| 亚洲一二三区视频在线观看| 国产亚洲精品成人av久久ww| 在线免费观看成人网| eeuss影院www在线播放| 国产精品一区二区你懂的| 国产精品自拍网| 黄动漫在线看| 久久er精品视频| 日本欧美黄网站| 成人福利在线观看视频| 成人午夜免费av| 国产精品亚洲精品| 哥也色在线视频| 91在线播放网址| 亚洲va国产va天堂va久久| 天堂网在线最新版www中文网| 国产精品美女久久久久久久网站| 成人亲热视频网站| 岛国毛片av在线| 亚洲精品久久久久久国产精华液| 国产精品一 二 三| 丁香5月婷婷久久| 欧美电影免费观看完整版| 日本三级黄色网址| 日韩一区精品视频| 国产欧美一区二区三区四区 | 欧美在线视频网站| 不卡专区在线| 亚洲欧美另类综合偷拍| 欧美a级黄色大片| 亚洲第一黄色| 国产精品av在线播放| 色偷偷色偷偷色偷偷在线视频| 国产精品乱人伦一区二区| 欧美交换配乱吟粗大25p| 9国产精品视频| 国产精品久久久久久久午夜| 91精品国产自产观看在线| 精品国产乱码久久久久久免费| 一级视频在线观看视频在线啦啦 | 韩国女主播一区二区三区| 中文字幕亚洲综合| 国产www视频在线观看| 在线亚洲高清视频| 嫩草嫩草嫩草嫩草| 国产精品色在线| 免费在线观看日韩视频|