赞
踩
通常情况下,项目需要部署上下通常采用下面几种方式
以Vue项目为例,打包之后
利用指令/工具,利用Scp命令行或FTP将dist目录中的文件上传至服务器Web环境根目录下。
利用git服务器,ssh进入web服务器 -> 执行git clone或git pull将项目克隆至服务器 -> 执行npm install -> 执行npm run build。
以上两种方式都不是最优解,第一种方式操作步骤繁琐;第二种服务器需要安装node&git环境,并且多了项目源码,浪费服务器资源
1、首先安装shelljs和ssh2-sftp-client
npm i shelljs ssh2-sftp-client --save-dev
2、新建sftp和index文件
module.exports = { production: { sftp: { host: '****', // 测试环境 username: '****', // ssh 用户名 port: '****', // 端口 password: '****' // ssh 密码 }, pathConfig: { remotePath: '/usr/local/cl-platform/tomcat/webapps/web/suizhen', // 操作开始文件夹 可以直接指向配置好的地址 remoteBackupPath: '/usr/local/cl-platform/tomcat/webapps/web/suizhen_backup', // 备份的文件夹 localPath: '../dist' } } }
const config = require('./sftp.js') const shell = require('shelljs') let Client = require('ssh2-sftp-client') const path = require('path') let client = new Client() const PUBLISH_VERSON = process.env.PUBLISH_VERSON const { sftp, pathConfig } = config[PUBLISH_VERSON] // 打包 npm run build const compileDist = async () => { if (shell.exec(`npm run build`).code === 0) { console.log('打包成功') } } const connectSSh = async () => { try { await client.connect(sftp) // 删除备份文件,如果有 if (await client.exists(pathConfig.remoteBackupPath)) { await client.rmdir(pathConfig.remoteBackupPath, true) console.log('删除备份文件成功') } // 重命名之前的文件作为备份文件 if (await client.exists(pathConfig.remotePath)) { await client.rename(pathConfig.remotePath, pathConfig.remoteBackupPath) console.log('新的备份文件重命名成功') } // 上传本地文件 await client.uploadDir(path.resolve(__dirname, pathConfig.localPath), pathConfig.remotePath) console.log('上传成功') } catch (err) { console.log(err) } finally { client.end() } } async function runTask () { await compileDist() // 打包完成 await connectSSh() // 提交上传 } runTask()
如果需要 PUBLISH_VERSON,则按照如下设置,若不需要,直接把实例中PUBLISH_VERSON 删掉即可
3、package.json里面新增命令 自动打包上传文件
如果不需要切换不同路径的版本:
"publish": "node publish/index.js",
如果需要更新不同路径的版本:
需要安装 cross-env,npm install cross-env --save-dev
"publish:prod": "cross-env PUBLISH_VERSON=production node publish/index.js",
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。