好久沒寫博客了,由於最近在用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
果真能夠看到已經修改而且上傳完成了。上傳須要時間,請耐心等待。
來到咱們的服務器,果真最近的修改時間已經變成如今了。
今後之後我終於不用一個個上傳了。每次要修改直接。打開一個窗口開啓這個腳本,就能夠愉快的編碼了。