国产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
    主站蜘蛛池模板: 国产情侣91 | 成人久久久久久 | 国产精品资源在线播放 | 亚洲欧美自拍偷拍 | 亚欧乱色视频网站大全 | 国产亚洲欧美一区二区三区 | 亚洲视频在线免费播放 | 日韩免费在线观看视频 | 日韩欧 | 精品视频一区二区 | 日本不卡在线观看 | 国产欧美日韩一区 | 欧美另类日韩 | 91精品久久久久久久久久 | 最新国产精品视频 | 日韩国产欧美一区二区三区 | 精品日韩在线观看 | 成人欧美一区二区三区视频不卡 | 一级毛片一级毛片一级毛片 | 91久久精品国产亚洲 | 一级久久 | 欧洲亚洲一区 | 欧美日韩国产中文字幕 | 欧美成人中文字幕在线视频 | 欧美日韩视频一区二区三区 | 欧美 国产 日韩 第一页 | 欧美在线视频观看 | 精品视频免费看 | 欧美 第一页 | 日韩欧美综合在线 | 亚洲尹人九九大色香蕉网站 | 日韩一二三 | 国产精品色综合久久 | 亚洲图片欧美在线 | 免费视频精品一区二区 | 欧美日韩亚洲一区二区三区在线观看 | 久久伊人网站 | 久久久精品久久久久久久久久久 | 欧美日一区二区三区 | 九九久久久2 | 日韩第七页 |