最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js自動上傳ftp的腳本分享

 更新時間:2018年06月16日 10:53:57   作者:東勝  
這篇文章主要給大家介紹了一個關(guān)于node.js自動上傳ftp腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

起因

剛加入一個小組的項目開發(fā),開發(fā)環(huán)境是基于node環(huán)境,通過webpack打包構(gòu)建代碼,然后上傳sftp,在瀏覽器測試。這種開發(fā)模式無可厚非,但是每次修改源代碼,然后build,然后upload,不勝其煩。之前項目中有過 gulp-sftp任務(wù)腳本,然而并不是生效。于是自力更生,另謀他法,搞一個自動上傳sftp的服務(wù)腳本。

設(shè)想

因為基于webpack,所以直接啟動webpack編譯的watch監(jiān)聽即可,在watch回調(diào)里執(zhí)行stfp的上傳,上傳去npm社區(qū)找一個sftp的客戶端插件

實現(xiàn)

使用了插件ssh2-sftp-client,文檔有使用說明和api

寫書寫了一個 sftp 模塊,連接完,直接導(dǎo)出

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

const sftp = new Client();
sftp
 .connect({
 host: '0.0.0.0', // ftp服務(wù)器ip地址
 port: '22', // ftp服務(wù)器port
 username: 'yourname', // 你的登錄用戶名
 password: 'yourpass', // 你的密碼
 privateKey: fs.readFileSync('/Users/yourname/.ssh/id_rsa'), // 私鑰
 passphrase: 'yourpass', // 私鑰密碼
 })
 .then(() => {
 console.log('ftp文件服務(wù)器連接成功');
 })
 .catch(err => {
 console.log(err, 'catch error');
 });

module.exports = sftp;

然后在webpack的watch里進(jìn)行 上傳文件即可,關(guān)于上傳文件,圖片的等類型需要使用Buffer類型上傳,做一個特殊處理

const path = require('path');
const fs = require('fs');
const yargs = require('yargs');
const webpack = require('webpack');
const webpackConfig = require('./webpack.prod.config');
const sftp = require('./sftp');

const user = yargs.argv.user || '';

console.log(user);

const staticFilesPath = {
 js: {
 local: path.resolve(__dirname, '../dist/js'),
 remote: `/upload_code/${user}/static/mobile/js/dist`,
 },
 css: {
 local: path.resolve(__dirname, '../dist/css'),
 remote: `/upload_code/${user}/static/mobile/css/`,
 },
 img: {
 local: path.resolve(__dirname, '../dist/images'),
 remote: `/upload_code/${user}/static/mobile/images/`,
 },
};

let isFirstBuild = true;

const compiler = webpack(webpackConfig);
const watching = compiler.watch(
 {
 ignored: /node_modules/,
 aggregateTimeout: 100,
 poll: 1000,
 },
 (err, stats) => {
 if (err || stats.hasErrors()) {
  console.log(err);
 }
 console.log('編譯成功!');
 if (isFirstBuild) {
  isFirstBuild = false;
  return;
 }
 console.log('正在上傳...');
 uploadFile()
  .then(() => {
  console.log('------所有文件上傳完成!-------\n');
  })
  .catch(() => {
  console.log('------上傳失敗,請檢查!-------\n');
  });
 }
);
/**
* 處理文件路徑,循環(huán)所有文件,如果是圖片需要讀取成Buffer類型
**/
function handleFilePath(obj, type) {
 const { local, remote } = obj;
 const files = fs.readdirSync(local);
 return files.map(file => {
 const _lp = `${local}/${file}`;
 return {
  type: type,
  file: file,
  localPath: type !== 'img' ? _lp : fs.readFileSync(_lp),
  remotePath: `${remote}/${file}`,
 };
 });
}
/**
* 上傳文件
**/
function uploadFile() {
 let files = [];

 Object.keys(staticFilesPath).forEach(key => {
 files = files.concat(handleFilePath(staticFilesPath[key], key));
 });

 const tasks = files.map(item => {
 return new Promise((resolve, reject) => {
  sftp
  .put(item.localPath, item.remotePath)
  .then(() => {
   console.log(`${item.file}上傳完成`);
   resolve();
  })
  .catch(err => {
   console.log(`${item.file}上傳失敗`);
   reject();
  });
 });
 });

 return Promise.all(tasks);
}

注意點:

  • 連接sftp服務(wù)器,推薦使用 私鑰文件連接,使用password出錯可能性比較大
  • 上傳文件部分,目前不支持上傳一個目錄,所以需要循環(huán)處理文件
  • 上傳文件部分,容易出錯,一定要保證遠(yuǎn)端服務(wù)器存在對應(yīng)目錄,目前插件沒有自動創(chuàng)建目錄的機(jī)制

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 干凈卸載Windows的Node.js環(huán)境的方法

    干凈卸載Windows的Node.js環(huán)境的方法

    這篇文章主要介紹了如何干凈卸載Windows的Node.js環(huán)境的方法,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家刪除Node.js環(huán)境有一定的幫助,需要的朋友可以參考下
    2025-01-01
  • 詳解Node全局變量global模塊

    詳解Node全局變量global模塊

    這篇文章主要介紹了詳解Node全局變量global模塊,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 基于Node.js實現(xiàn)一鍵生成個性化二維碼

    基于Node.js實現(xiàn)一鍵生成個性化二維碼

    這篇文章主要為大家詳細(xì)介紹了如何使用Node.js、Jimp和QRCode庫,結(jié)合一個簡單的腳本,通過命令行命令來快速給二維碼加上指定的背景,打造更有個性化的二維碼,感興趣的可以了解下
    2024-03-03
  • 使用Node.js find-up在父目錄中高效尋找文件與目錄

    使用Node.js find-up在父目錄中高效尋找文件與目錄

    find-up 是一個小巧但功能強(qiáng)大的 Node.js 包,它能幫助我們實現(xiàn)這一需求,本文將深入探究如何使用 find-up 進(jìn)行有效搜索,并結(jié)合豐富的代碼演示幫助大家快速掌握其用法,需要的朋友可以參考下
    2024-05-05
  • Node.js控制器Controller使用教程

    Node.js控制器Controller使用教程

    這篇文章主要介紹了Node.js控制器Controller使用教程,一個控制器的目的是接收應(yīng)用程序的特定請求。路由機(jī)制控制哪個控制器接收哪些請求。通常,每個控制器有一個以上的路由,不同的路由可以執(zhí)行不同的動作
    2023-04-04
  • nodejs使用redis作為緩存介質(zhì)實現(xiàn)的封裝緩存類示例

    nodejs使用redis作為緩存介質(zhì)實現(xiàn)的封裝緩存類示例

    這篇文章主要介紹了nodejs使用redis作為緩存介質(zhì)實現(xiàn)的封裝緩存類,涉及nodejs操作redis進(jìn)行緩存設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 在koa中簡單使用Websocket連接的方法示例

    在koa中簡單使用Websocket連接的方法示例

    本文主要介紹了在koa中簡單使用Websocket連接的方法示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 關(guān)于npm主版本升級及其相關(guān)知識點總結(jié)

    關(guān)于npm主版本升級及其相關(guān)知識點總結(jié)

    npm是Node.js默認(rèn)的包管理器,以javascript?編寫的軟件包管理系統(tǒng)用于分享和使用代碼,下面這篇文章主要給大家介紹了關(guān)于npm主版本升級及其相關(guān)知識點總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • express中static中間件的具體使用方法

    express中static中間件的具體使用方法

    這篇文章主要介紹了express中static中間件的具體使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——5.素材管理接口,非常具有實用價值,需要的朋友可以參考下
    2017-04-04

最新評論

巫山县| 蓝山县| 宾阳县| 民县| 邹平县| 丰台区| 鄂伦春自治旗| 墨竹工卡县| 四平市| 屯昌县| 桂平市| 红安县| 鄂尔多斯市| 都匀市| 鄯善县| 星座| 克什克腾旗| 三原县| 绿春县| 正宁县| 宜兰县| 安阳市| 天水市| 托里县| 南皮县| 桃园市| 布尔津县| 侯马市| 友谊县| 醴陵市| 长丰县| 缙云县| 玛沁县| 正镶白旗| 额敏县| 时尚| 莒南县| 萝北县| 黄平县| 化州市| 阿尔山市|