欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Docker進(jìn)行node開發(fā)時(shí)實(shí)現(xiàn)熱加載功能

 更新時(shí)間:2024年09月29日 10:36:23   作者:冷夜星光  
這篇文章主要介紹了使用docker進(jìn)行vue、react或者node開發(fā)時(shí)實(shí)現(xiàn)熱加載功能,即宿主機(jī)文件修改之后實(shí)時(shí)刷新或者實(shí)時(shí)重啟服務(wù),文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下

說明:使用docker進(jìn)行vue、react或者node開發(fā)時(shí)實(shí)現(xiàn)熱加載功能,即宿主機(jī)文件修改之后實(shí)時(shí)刷新或者實(shí)時(shí)重啟服務(wù)。

不使用docker

本地開發(fā)node程序的時(shí)候只需要配置 nodemon 啟動(dòng)就可以了,例如
假設(shè)你有一個(gè)簡(jiǎn)單的 Node.js 文件,名為 app.js,內(nèi)容如下:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content - Type': 'text/plain'});
    res.end('Hello, World!\n');
});

server.listen(3000, () => {
    console.log('Server running on port 3000');
});

然后只需要運(yùn)行以下命令

npm install -g nodemon
nodemon app.js

此時(shí),當(dāng)你修改 app.js 文件內(nèi)容之后,nodemon 就會(huì)檢測(cè)到文件變化并自動(dòng)重啟服務(wù)器,刷新頁(yè)面之后你就能立即看到修改后的效果。

使用docker

docker版本為 Docker version 27.1.1, build 6312585 ,且已經(jīng)配置好 dockerfile 文件的基礎(chǔ)之上。實(shí)現(xiàn)本地文件與容器內(nèi)文件的同步有多種方法。在這兒只介紹在compose.yaml配置的兩種方法,分別是:

1. 使用 watch 同步配置(推薦):

services:
  server:
    build:
      context: .
    ports:
      - 3000:3000
    develop:
      watch:
        - path: ./package.json  # 監(jiān)聽當(dāng)前目錄下的package.json文件
          action: rebuild  # package.json文件變化時(shí)docker會(huì)重新構(gòu)建,與docker compose up --build等效
        - path: .   # 監(jiān)聽當(dāng)前目錄
          target: /usr/src/app  # 容器中的目標(biāo)路徑,將宿主機(jī)的當(dāng)前目錄與容器內(nèi)的/usr/src/app路徑相關(guān)聯(lián)
          ignore:   # 忽視的文件
            - node_modules/
          action: sync # 同步動(dòng)作,docker會(huì)確保對(duì)主機(jī)上文件所做的任何更改自動(dòng)與服務(wù)容器內(nèi)的相應(yīng)文件相匹配。
    command: nodemon app.js

請(qǐng)仔細(xì)看注釋,此時(shí)只需要運(yùn)行 docker compose up --watch 命令即可實(shí)現(xiàn)熱更新。 更多配置請(qǐng)前往官方文檔查看

2. 使用Bind Mounts綁定掛載(容器文件更改會(huì)同步到宿主機(jī)):

services:
  server:
    build:
      context: .
    ports:
      - 3000:3000
    volumes:
      - .:/usr/src/app  # 綁定掛載宿主機(jī)當(dāng)前目錄到容器
      - /usr/src/app/node_modules   # 創(chuàng)建一個(gè)匿名卷用于存儲(chǔ)容器的node_modules,防止本地 node_modules目錄覆蓋容器中的依賴。
    command: nodemon --legacy-watch --polling-interval 1000 app.js  # 此處命令與上面不一致

請(qǐng)仔細(xì)看注釋,使用該配置運(yùn)行 docker compose up 命令也能實(shí)現(xiàn)熱更新。

注意:

相信你也注意到了command命令和上面的 不一致,這是因?yàn)橹苯舆\(yùn)行 nodemon app.js 在windows下會(huì)出現(xiàn)熱加載失效的情況。具體現(xiàn)象是在容器內(nèi)修改文件時(shí),nodemon 能夠正確檢測(cè)到更改并熱加載應(yīng)用;但在宿主機(jī)修改文件時(shí),盡管文件已經(jīng)同步到容器內(nèi),nodemon 卻未能檢測(cè)到這些更改,從而無法觸發(fā)熱加載。

原因: 在 Docker 環(huán)境中,尤其是在 macOS 和 Windows 上,由于底層文件系統(tǒng)的差異,文件系統(tǒng)事件(如 inotify 事件)可能無法正確地從宿主機(jī)傳遞到容器。這導(dǎo)致 nodemon 無法檢測(cè)到宿主機(jī)上的文件更改。因此,盡管文件已同步到容器內(nèi),nodemon 依然未能觸發(fā)熱加載。

解決方案: 配置 nodemon 使用輪詢,也就是 nodemon --legacy-watch --polling-interval 1000 app.js 命令實(shí)現(xiàn)熱加載功能。不過需要注意的是相較于默認(rèn)模式,輪詢模式會(huì)消耗更多的 CPU 和 I/O 資源,尤其是在大規(guī)模項(xiàng)目或頻繁文件變更的時(shí)候。另外也可以嘗試使用 docker-syncmutagen 等工具來解決這個(gè)問題,不過我沒試過。

總結(jié)

1.使用 watch 同步配置

優(yōu)點(diǎn)

  • 高級(jí)同步策略:可以針對(duì)特定文件或目錄設(shè)置不同的同步策略,例如僅在某些文件更改時(shí)觸發(fā)重建。
  • 自動(dòng)化流程:結(jié)合自動(dòng)重建和同步,提升開發(fā)效率,減少手動(dòng)操作。
  • 靈活性:可以根據(jù)項(xiàng)目需求定制同步和重建的行為,適應(yīng)復(fù)雜的開發(fā)流程。

缺點(diǎn)

  • 維護(hù)成本:配置可能需要更多的維護(hù),尤其是在團(tuán)隊(duì)協(xié)作或項(xiàng)目規(guī)模擴(kuò)大時(shí)。

適用場(chǎng)景

  • 大多數(shù)項(xiàng)目:適用于大多數(shù)項(xiàng)目,個(gè)人強(qiáng)烈推薦。

2.使用Bind Mounts綁定掛載

優(yōu)點(diǎn)

  • 實(shí)時(shí)同步:任何在宿主機(jī)上更改會(huì)立即在容器內(nèi)生效,反之亦然。
  • 簡(jiǎn)單直觀:配置簡(jiǎn)單,直接映射宿主機(jī)目錄到容器目錄。

缺點(diǎn)

  • 性能問題:在某些操作系統(tǒng)(如 macOS 和 Windows)上,綁定掛載的性能可能較差,尤其是在大量文件操作時(shí)。另外在windows下文件系統(tǒng)事件可能無法及時(shí)傳遞。
  • 路徑依賴:綁定掛載路徑依賴于宿主機(jī)的文件系統(tǒng)結(jié)構(gòu),可能影響跨平臺(tái)的可移植性。
  • 權(quán)限管理:需要確保宿主機(jī)和容器內(nèi)的文件權(quán)限一致,避免權(quán)限沖突問題。

適用場(chǎng)景

  • 開發(fā)環(huán)境:需要頻繁修改代碼并希望這些更改即時(shí)反映到運(yùn)行中的容器中。
  • 簡(jiǎn)單項(xiàng)目:項(xiàng)目結(jié)構(gòu)簡(jiǎn)單,不需要復(fù)雜的文件同步策略。

以上就是使用Docker進(jìn)行node開發(fā)時(shí)實(shí)現(xiàn)熱加載功能的詳細(xì)內(nèi)容,更多關(guān)于Docker node熱加載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • docker+jenkins+gitee配置持續(xù)集成部署方式

    docker+jenkins+gitee配置持續(xù)集成部署方式

    這篇文章主要介紹了docker+jenkins+gitee配置持續(xù)集成部署方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • docker環(huán)境搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái)的教程

    docker環(huán)境搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái)的教程

    這篇文章主要介紹了docker下搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • docker容器重啟錯(cuò)誤的解決方案

    docker容器重啟錯(cuò)誤的解決方案

    本文主要介紹了docker容器重啟錯(cuò)誤的解決方案,詳細(xì)的介紹了docker 重啟錯(cuò)誤的原因及其解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 詳解用Docker構(gòu)建MySQL主從環(huán)境

    詳解用Docker構(gòu)建MySQL主從環(huán)境

    這篇文章主要介紹了詳解用Docker構(gòu)建MySQL主從環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • docker 數(shù)據(jù)目錄遷移的兩種實(shí)現(xiàn)方法

    docker 數(shù)據(jù)目錄遷移的兩種實(shí)現(xiàn)方法

    本文主要介紹了docker 數(shù)據(jù)目錄遷移的兩種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目

    如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目

    這篇文章主要介紹了如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目,本文通過實(shí)例圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Docker拉取容器鏡像超時(shí)的問題解決辦法

    Docker拉取容器鏡像超時(shí)的問題解決辦法

    這篇文章主要介紹了Docker拉取容器鏡像超時(shí)問題的解決辦法,解決方法包括配置Docker鏡像加速器、設(shè)置代理、通過中介設(shè)備傳送鏡像等,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 利用python自動(dòng)生成docker nginx反向代理配置

    利用python自動(dòng)生成docker nginx反向代理配置

    這篇文章主要介紹了利用python自動(dòng)生成docker nginx反向代理配置的相關(guān)資料,完成反向代理盡量簡(jiǎn)單,占內(nèi)存少等,需要的朋友可以參考下
    2017-01-01
  • Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案

    Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案

    這篇文章主要介紹了Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker中的compose簡(jiǎn)介

    Docker中的compose簡(jiǎn)介

    Docker?Compose?是?Docker?官方編排(Orchestration)項(xiàng)目之一,負(fù)責(zé)快速在集群中部署分布式應(yīng)用,這篇文章主要介紹了Docker之compose介紹,需要的朋友可以參考下
    2023-02-02

最新評(píng)論