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

好久沒寫博客了,由於最近在用react+express作一個本身的工具型網站(其實就是奪寶島搶拍器)node

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

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

npm install ssh2-sftp-client
npm install gaze

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

第二個模塊的做用就是監聽文件變化了。固然,你也能夠採用node自帶fs模塊。express

這兩個模塊的用法在這裏:ssh2-sftp-client gazenpm

安裝好了之後,第一步就是監聽文件的變化了,因爲個人文件已經使用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');
    });
}

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

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

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

果真能夠看到已經修改而且上傳完成了。上傳須要時間,請耐心等待。

來到咱們的服務器,果真最近的修改時間已經變成如今了。

今後之後我終於不用一個個上傳了。每次要修改直接。打開一個窗口開啓這個腳本,就能夠愉快的編碼了。

相關文章
相關標籤/搜索