node 自动化工程部署

如果打包的文件需要压缩,请参考node 的 archiver  插件使用

(转载:https://blog.csdn.net/harmsworth2016/article/details/82214736)

正常情况下的打包如下:

const { NodeSSH } = require("node-ssh");

const { local, remote, clientConfig } = require("../config");

module.exports = async function (option) {
  //实例化node服务器连接协议
  const client = new NodeSSH();
  //连接服务器
  let connect = await client.connect(clientConfig);
  //判断是否连接成功
  let isConnected = client.isConnected();
  if (isConnected) {
    //第一个参数:命令
    //第二个参数:命令后面的参数,详情参考linux的操作命令(一般服务器都是linux的,windows的命令未有尝试)
    // const status = await client.exec('ls',['-l'])
    // console.log(status)
    //上传文件
    const status = await client.putDirectory(local, remote, {
      recursive: true,
      concurrency: 10,
    });
    //成功为true
    status?console.warn('部署成功') : console.warn('部署失败')
    process.exit(0)
  }
};

其中,config的js写法:

const path = require('path')
module.exports = {
  local: path.resolve(__dirname, '../dist'), //本地 待发布目标
  remote: '/home/admin/initvite',//服务器 发布地址
  clientConfig: {
    port: 你的服务器端口, // ssh 端口
    host: '你的服务器地址',// ssh 地址
    username: '你的用户名',// ssh 用户
    password: '你的用户密码', // 密码 
  },
}

可以结合

commander.js做成命令在你本地编译后直接发布到服务器
写法大概如下,其中action里面引入的就是刚才的node-ssh文件
const {program} = require('commander')
const action = require('./action')

program
.command('say')//你的命令
.alias('s')//你的命令的简写  
.option('-sc,--c <c>','查看输入的值','1') //你的命令参数,eg:-sc  也可以是--c 最后在action 的参数中显示出来是  c这个key
.option('-sl,--l <l>','第二個參數','1')//你的命令参数
.action(action)//输入命令后要调用的方法

运行效果如图:

 

然后可以把命令配置到项目的package.json中,如:(这里以vite的vue项目为例)
"scripts": {
    "dev": "vite",
    "build": "vue-tsc --noEmit && vite build &&node deploy say",
    "serve": "vite preview",
  },

 

 
posted @ 2022-01-11 15:04  洛晨随风  阅读(165)  评论(0编辑  收藏  举报