webpack打包上傳SFTP

功能所需依賴 fs擎勘、glob、ssh2-sftp-clien

新建js文件泌霍,可放至build目錄下

const fs = require('fs')

const glob = require('glob')

const Client = require('ssh2-sftp-client')

const sftp = new Client()

const pluginName = 'SftpPlugin'

class SftpPlugin {

? // dir 本地目錄格式 path.join(__dirname, '..', 'dist/')

? constructor({ dir = '', url = '/', host = '192.168.*.*', port = '22', username = '', password = '', filterFile = null } = {}) { // constructor是一個構造方法货抄,用來接收參數(shù)

? ? this.url = url

? ? this.dir = dir

? ? this.filterFile = filterFile

? ? this.config = {

? ? ? host: host, // 服務器地址

? ? ? port: port,

? ? ? username: username,

? ? ? password: password

? ? }

? }

? apply(compiler) {

? ? if (compiler) {

? ? ? compiler.hooks.done.tap(pluginName, compilation => {

? ? ? ? this.put()

? ? ? })

? ? } else {

? ? ? this.put()

? ? }

? }

? put() { // 自動上傳到FTP服務器

? ? if (!this.dir) {

? ? ? console.error('無法上傳SFTP,請檢查參數(shù)')

? ? ? return

? ? }

? ? sftp.connect(this.config).then(() => { // 連接服務器

? ? ? sftp.list(this.url).then(list => {

? ? ? ? this.deleteServerFile(list).then(() => {

? ? ? ? ? this.globLocalFile()

? ? ? ? })

? ? ? }).catch(err => {

? ? ? ? this.exError(err)

? ? ? })

? ? }).catch(err => {

? ? ? this.exError('sftp連接失敗' + err)

? ? })

? }

? async deleteServerFile(list) { // 刪除服務器上文件(夾)

? ? for (const fileInfo of list) {

? ? ? const path = this.url + fileInfo.name

? ? ? if (fileInfo.type === '-') {

? ? ? ? await sftp.delete(path)

? ? ? } else {

? ? ? ? await sftp.rmdir(path, true)

? ? ? }

? ? }

? ? return new Promise(resovle => {

? ? ? resovle()

? ? })

? }

? globLocalFile() { // 獲取本地路徑所有文件

? ? glob(this.dir + '**', (er, files) => { // 本地目錄下所有文件(夾)的路徑

? ? ? files.splice(0, 1) // 刪除路徑../dist/

? ? ? if (this.filterFile && typeof this.filterFile === 'function') files = files.filter(x => this.filterFile(x))

? ? ? this.uploadFileToSftp(files)

? ? })

? }

? async uploadFileToSftp(files) { // 傳輸文件到服務器

? ? for (const localSrc of files) {

? ? ? const targetSrc = localSrc.replace(this.dir.replace(/\\/g, '/'), this.url)

? ? ? if (fs.lstatSync(localSrc).isDirectory()) { // 是文件夾

? ? ? ? await sftp.mkdir(targetSrc)

? ? ? } else {

? ? ? ? await sftp.put(localSrc, targetSrc)

? ? ? }

? ? }

? ? console.log('已上傳至SFTP服務器!')

? ? sftp.end()

? }

? exError(err) { // 出錯請調(diào)用此方法

? ? sftp.end()

? ? console.error('sftpError:', err)

? }

}

modules.export =?SftpPlugin?

在 項目中的 build/webpack.prod.conf.js 引入

const SftpPlugin = require('./SftpPlugin')


在plugin中



new SftpPlugin({ dir: path.join(__dirname, '..', 'dist/'), url: '/soft/nginx/', host: '192.168.*.*' })

注意: url為sftp服務所對應的你想要上傳的地址,根據(jù)實際情況修改

最后, npm run build 就可以自動部署到ftp服務器了

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朱转,一起剝皮案震驚了整個濱河市蟹地,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藤为,老刑警劉巖怪与,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缅疟,居然都是意外死亡分别,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門存淫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耘斩,“玉大人,你說我怎么就攤上這事桅咆±ㄊ冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵岩饼,是天一觀的道長荚虚。 經(jīng)常有香客問我,道長籍茧,這世上最難降的妖魔是什么版述? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮寞冯,結果婚禮上渴析,老公的妹妹穿的比我還像新娘。我一直安慰自己吮龄,他們只是感情好檬某,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著螟蝙,像睡著了一般恢恼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胰默,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天场斑,我揣著相機與錄音,去河邊找鬼牵署。 笑死漏隐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的奴迅。 我是一名探鬼主播青责,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挺据,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脖隶?” 一聲冷哼從身側響起扁耐,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎产阱,沒想到半個月后婉称,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡构蹬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年王暗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庄敛。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡俗壹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藻烤,到底是詐尸還是另有隱情策肝,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布隐绵,位于F島的核電站之众,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏依许。R本人自食惡果不足惜棺禾,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望峭跳。 院中可真熱鬧膘婶,春花似錦、人聲如沸蛀醉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拯刁。三九已至脊岳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垛玻,已是汗流浹背割捅。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帚桩,地道東北人亿驾。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像账嚎,于是被迫代替她去往敵國和親莫瞬。 傳聞我的和親對象是個殘疾皇子儡蔓,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 4,820評論 0 1
  • 時間:2017-08-16 19:36:53來源:CSDN Hive 是基于Hadoop 構建的一套數(shù)據(jù)倉庫分析系...
    majyer閱讀 1,481評論 0 2
  • 還有很大的差距,三臨還遠遠不夠疼邀,唯有死去才能過來喂江,一定要徹徹底底地死去,不然就是四不像檩小!?????? 今日臨帖正文如下:...
    秋鴻春夢閱讀 650評論 2 9
  • 東漢末年,諸侯并起烟勋。 曹操挾天子以令不臣规求,氣吞山河。 袁本初四世三公卵惦,號百萬之眾阻肿。 江東孫策,承繼父業(yè)沮尿,亦有虎入山...
    帥涼閱讀 623評論 0 0
  • 在才入學時總以為畢業(yè)遙遙無期丛塌,然而真當畢業(yè)時,才知道時間是那么的快畜疾。
    逗比丶是一種態(tài)度閱讀 191評論 0 0