以下代码拿来就可以用
package.json配置
scripts{
.....,
"ssh": "node ./webpack/ftp.js",
}
使用方法 npm run ssh
let Client = require('ssh2-sftp-client');
const path = require('path')
const glob = require('glob')
const fs = require('fs');
let ora = require('ora'); //3.4.0指定这个版本 要不能会报错 npm i -D ora@3.4.0
let sftp = new Client();
const chalk = require('chalk');
const localPath = path.join(__dirname, '../dist']) 如 demo/dist
const remotePath = "/data/vue3/yuyue/demo3"; //上传到服务器上的地址
let ftpconfig = {
host: '88.88.88.88',
port: 22,
username: 'root',
password: '1234567'
}
let spinner = ora(chalk.green('上传中....')).start();
spinner.color = "green";
sftp.connect(ftpconfig).then(res => {
return sftp.exists(remotePath).then(rs => {
if (!rs) {
return sftp.mkdir(remotePath, true).then(res => {
if (res.includes('created')) {
return { code: 200, msg: '目录创建成功' }
} else {
return { code: 400, msg: '目录创建失败' }
}
})
} else {
return sftp.rmdir(remotePath, true).then(res => {
if (res.includes('Successfully')) {
return sftp.mkdir(remotePath, true).then(res => {
return { code: 200, msg: '目录创建成功' }
})
} else {
return { code: 400, msg: '目录创建失败' }
}
})
}
})
}).then(res => {
if (res.code == 200) {
return new Promise((succ, error) => {
fs.readdir(localPath, (err, files) => {
if (files.length) {
let mkdir = [];
files.filter(v => !v.includes('.')).forEach(v => {
mkdir.push(sftp.mkdir(remotePath + '/' + v, true))
})
return Promise.all(mkdir).then(m => {
succ({ code: 200, msg: '目录创建成功css,js' })
})
} else {
if (err) {
error({ code: 400, msg: err })
} else {
error({ code: 400, msg: '目录创建失败' })
}
}
})
})
} else {
return { code: 400, msg: '目录创建失败' }
}
}).then(res => {
if (res.code == 200) {
const fileLiat = glob.sync(`${localPath}/**/*.{js,css,png,eot,woff,ttf,html,map}`);
return Promise.all(
fileLiat.map(file => {
const remoteFile = file.replace(localPath, remotePath)
return sftp.fastPut(file, remoteFile)
})
)
}
}).then(res => {
spinner.succeed(chalk.green(`代码已提交至服务器上`))
spinner.stop()
sftp.end()
}).catch(err => {
console.log(chalk.blueBright(err && (err.msg || err.message || err)));
spinner.fail(chalk.green(`上传失败`))
spinner.stop()
sftp.end()
})