安装依赖
npm i shelljs -D
npm i ssh2-sftp-client -D
Shelljs是Node.js下的脚本语言解析器,具有丰富且强大的底层操作(Windows/Linux/OS X)权限。Shelljs本质就是基于node的一层命令封装插件,让前端开发者可以不依赖linux也不依赖类似于cmder的转换工具,而是直接在我们最熟悉不过的javascript代码中编写shell命令实现功能。
ssh2-sftp-client是node.js 的 SFTP 客户端,一个围绕SSH2的包装器,它提供了一个高级的便利抽象以及一个基于 Promise 的 API。
执行文件 upload/index.js
const config = require('./config.js')
const shell = require('shelljs')
const path = require('path')
const Client = require('ssh2-sftp-client')
// 打包 npm run build
const compileDist = async() => {
if (shell.exec(`npm run build:prod`).code === 0) {
console.log('打包成功')
}
}
async function connectSSh() {
const sftp = new Client()
sftp.connect({
host: config.ip, // 服务器 IP
port: config.port,
username: config.username,
password: config.password
}).then(() => {
console.log('先执行删除服务器文件')
return sftp.rmdir(config.rmpath, true)
}).then(() => {
// 上传文件
console.log('开始上传')
return sftp.uploadDir(path.resolve(__dirname, '../dist'), config.path)
}).then((data) => {
console.log('上传完成')
}).catch((err) => {
console.log(err, '失败')
}).finally(() => {
sftp.end()
})
}
async function runTask() {
await compileDist() // 打包完成
await connectSSh() // 提交上传
}
runTask()
配置package.json
"upload": "node upload/index.js"