利用nodejs監控文件變化並使用sftp上傳到伺服器

来源:http://www.cnblogs.com/baqiphp/archive/2017/02/18/6412149.html
-Advertisement-
Play Games

很久沒寫博客了,因為最近在用react+express做一個自己的工具型網站(其實就是奪寶島搶拍器) 然後因為經常要改動,而且又要放到伺服器上進行測試。總是要webpack,然後手動把文件上傳上去,不勝其煩,索性搜索了下,直接寫個能檢測文件變化並自動進行上傳的腳本好了。 首先,我們使用npm 安裝兩 ...


很久沒寫博客了,因為最近在用react+express做一個自己的工具型網站(其實就是奪寶島搶拍器)

然後因為經常要改動,而且又要放到伺服器上進行測試。總是要webpack,然後手動把文件上傳上去,不勝其煩,索性搜索了下,直接寫個能檢測文件變化並自動進行上傳的腳本好了。

首先,我們使用npm 安裝兩個別人封裝好的模塊。

npm install ssh2-sftp-client
npm install gaze

第一個模塊的作用是sftp上傳文件,

第二個模塊的作用就是監聽文件變化了。當然,你也可以採用node自帶fs模塊。

這兩個模塊的用法在這裡:ssh2-sftp-client gaze

安裝好了以後,第一步就是監聽文件的變化了,由於我的文件已經使用webpack構建好了,所以後面只是文件變化,不會有文件增加,所以這裡只需要使用changed就可以了,其他的用法請參考上面的鏈接,都大同小異

gaze(['你的文件路徑/*.*','還可以使用數組的方式監聽多個文件夾/app.js'], function(err, watcher) {
    let watched = this.watched();
    //監聽文件的變化
    this.on('changed', (filepath) => {
        //romotePath是我文件的遠程位置
        let romotePath = '/root' + filepath.substr(15);
        //put為上傳文件的函數,下麵會講    
        put(filepath,romotePath);
        console.log(filepath + ' was changed');

    });
});      

然後就開始寫我們的上傳文件的函數

function put(localPath,romotePath){
    let sftp = new Client();
    sftp.connect({
        host: '你的伺服器地址',
        port: '埠,沒改過的話是22',
        username: '連接的用戶名',
        password: '密碼'
    }).then(() => {
        return sftp.put(localPath,romotePath);
    }).then(() =>{
        console.log("上傳完成");
    }).catch((err) => {
        console.log(err, 'catch error');
    });
}

上面的代碼其實可以把connect部分提取出來作為一個全局變數的。這樣就不用每次都connect一下了。

好了,別忘了在我們的文件開始的地方可是要引入模塊的。

let Client = require('ssh2-sftp-client');
let gaze = require('gaze');

接下來我們來實驗一下。來到我們的文件夾webpack一下

果然可以看到已經修改並且上傳完成了。上傳需要時間,請耐心等待。

來到我們的伺服器,果然最近的修改時間已經變成現在了。

從此以後我終於不用一個個上傳了。每次要修改直接。打開一個視窗開啟這個腳本,就可以愉快的編碼了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天我們來講一下職責鏈模式。首先我們來模擬一下下麵這個場景。 一、案例 在公司,我們需要向領導請假,向領導申請加薪,不同級別的領導會做出相應的批示。下麵我們用簡單的控制台應用程式來模擬一下這個案例。 客戶端調用: 好,下麵我們來分析一下上述代碼,看看有什麼問題和缺陷。 ①:GetResult這個方法 ...
  • 完善了一些功能 1.添加了心跳驗證,替換主從服務;保證服務運行 2.恢復非活動服務 3.驗證功能 4.添加UDP穿牆以及TCP穿牆(還在測試中) GitHub:https://github.com/jinyuttt/NameServer ...
  • Action類的3種書寫方式 本文主要寫有關寫Action類的3種書寫方式: (1)第一種 Action可以是POJO (簡單模型對象) 不需要繼承任何父類 也不需要實現任何介面 (2)實現Action介面 (3)繼承ActionSupport(推薦) 那我們先來書寫第一種: (1)第一種 Acti ...
  • Struts2.xml 本篇博客主要講struts.xml中package下的標簽和標簽屬性,主要分以下四個部分說明: (1)action的配置基本屬性 (2)同一個Action類中不同方法滿足不同的action邏輯 (3)通配符解決多業務問題 (4)配置處理結果: (1)action的配置基本屬性 ...
  • 為了更好的學習設計模式,以及督促自己完成設計模式的學習,現提筆為記。 怎麼的,每周至少也要學一個設計模式!!! 懇請大家的監督和不吝賜教,共同學習和進步! 內容主要參考自《設計模式之禪》以及相關網路博文! 源碼路徑: "源代碼" C GitHub 目錄 1. "想學設計模式,你得先會看類圖,一張圖讀 ...
  • 今天我們來講一下命令模式。 一、案例 我們去燒烤店吃燒烤,給我們烤羊肉串和雞翅。用簡單的控制台應用程式來模擬一下。 客戶端調用: 二、演繹 1、第一步演繹 如果燒烤店裡有好多人,都要了若幹的烤串和雞翅,那麼,烤肉串者怎麼記得誰點了什麼,點了多少串呢?這樣就會亂掉了。如何解決這個問題呢?我們需要服務員 ...
  • extends與implements的不同 1、在類的聲明中,通過關鍵字extends來創建一個類的子類。 一個類通過關鍵字implements聲明自己使用一個或者多個介面。 extends 是繼承某個類, 繼承之後可以使用父類的方法, 也可以重寫父類的方法; implements 是實現多個介面, ...
  • 今天我們來講一下橋接模式。 一、案例 我有N牌子的一個手機,需要運行一款游戲軟體。咱們用簡單的控制台應用程式來實現一下。 客戶端調用: 二、演繹 1、第一步演繹: 如果我不僅有N品牌的手機,還有M品牌的手機也需要運行這款游戲軟體,怎麼辦? 我們可以將運行游戲軟體抽象出一個父類,讓N,M品牌的手機繼承 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...