国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 22:12:51
文檔

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

node.js自動上傳ftp的腳本分享:起因 剛加入一個小組的項目開發,開發環境是基于node環境,通過webpack打包構建代碼,然后上傳sftp,在瀏覽器測試。這種開發模式無可厚非,但是每次修改源代碼,然后build,然后upload,不勝其煩。之前項目中有過 gulp-sftp任務腳本,然而并不是生效。于
推薦度:
導讀node.js自動上傳ftp的腳本分享:起因 剛加入一個小組的項目開發,開發環境是基于node環境,通過webpack打包構建代碼,然后上傳sftp,在瀏覽器測試。這種開發模式無可厚非,但是每次修改源代碼,然后build,然后upload,不勝其煩。之前項目中有過 gulp-sftp任務腳本,然而并不是生效。于

起因

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

設想

因為基于webpack,所以直接啟動webpack編譯的watch監聽即可,在watch回調里執行stfp的上傳,上傳去npm社區找一個sftp的客戶端插件

實現

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

寫書寫了一個 sftp 模塊,連接完,直接導出

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

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

module.exports = sftp;

然后在webpack的watch里進行 上傳文件即可,關于上傳文件,圖片的等類型需要使用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');
 });
 }
);
/**
* 處理文件路徑,循環所有文件,如果是圖片需要讀取成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服務器,推薦使用 私鑰文件連接,使用password出錯可能性比較大
  • 上傳文件部分,目前不支持上傳一個目錄,所以需要循環處理文件
  • 上傳文件部分,容易出錯,一定要保證遠端服務器存在對應目錄,目前插件沒有自動創建目錄的機制
  • 總結

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    node.js自動上傳ftp的腳本分享:起因 剛加入一個小組的項目開發,開發環境是基于node環境,通過webpack打包構建代碼,然后上傳sftp,在瀏覽器測試。這種開發模式無可厚非,但是每次修改源代碼,然后build,然后upload,不勝其煩。之前項目中有過 gulp-sftp任務腳本,然而并不是生效。于
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国内精品免费视频 | 国产在线高清视频 | 日韩欧美一区二区三区免费看 | 国产精品免费播放 | 亚洲精品国产综合一线久久 | 美国人禽交ooo | 久久久91精品国产一区二区 | 欧美一区二区在线观看免费网站 | 人与鲁牲交持级毛片 | 久久精品一区二区三区不卡牛牛 | 亚洲色图欧美另类 | 欧美一区二区三区视频在线 | 日本一道在线 | 国产日韩欧美精品 | 亚洲欧美日韩国产色另类 | 在线观看色网站 | 精品久久久久国产 | 日韩视频一区二区 | 一区二区网站 | 亚洲视频网站在线观看 | 久久久久久久国产精品毛片 | 欧美日韩精品在线观看 | 成人a毛片免费视频观看 | 成人黄色在线观看 | 一区二区三区精品牛牛 | 亚洲国产成人久久一区二区三区 | 欧美日韩国产精品va | 亚洲风情第一页 | 高清视频一区 | 亚洲免费福利 | 国产全部视频在线播放 | 亚洲一区二区三区免费 | 可以免费看的毛片 | 国产精品第一 | 国产视频高清 | 日日做夜夜爱 | 黄片毛片一级 | 亚洲精品成人久久久影院 | 久久婷婷久久一区二区三区 | 偷拍第一页 | 日韩视频在线观看 |