前言
前端项目部署时,nginx配置完成后,只需将打包后的文件上传至服务器指定目录下便可。 前端
通常使用如下方式完成:node
- xshell 等命令行工具上传
- ftp/sftp 等可视化工具上传
- jenkins 等自动化部署服务 对于简单前端项目,频繁部署时,xshell、ftp两种方式较为繁琐,而jenkins 等自动化部署服务须要提早安装软件、并熟悉配置流程。 所以但愿借助本地 node 服务实现对前端打包后文件的上传工做,既不须要服务器额外安装程序,还能够帮助咱们实现快速上传部署,更能帮助咱们深刻了解 node 。
目的
减小web项目在开发调试过程当中频繁编译打包后再使用ftp工具部署至服务器的手动过程,提升工做效率。nginx
1.导入依赖模块
- npm install inquirer ssh2-sftp-client
- touch ssh.js helper.js
- 在package.json增长一个脚本,完成以后必定要 npm i 从新安装依赖,确保新加入的脚本生效!
1 2 3 4 | "scripts" : { "test" : "echo \"Error: no test specified\" && exit 1" , "deploy" : "bash deploy.sh" }, |
- touch deploy.sh
1 2 3 4 5 | npm run build echo "打包完成" node ./ssh.js cd - |
2. 链接远端服务器并上传操做
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | const Client = require( 'ssh2-sftp-client' ) const sftp = new Client() const helper = require ( './helper' ) const config = [ { name: 'a' , // 项目/服务器名称 ssh: { host: '192.168.0.105' , port: 22, username: 'root' , password: 'root' , }, romotePath: '/var/www/dist' , // 远程地址 localPath: './dist' , // 本地地址 }, { name: 'b' , ssh: { host: '192.168.0.110' , port: 22, username: 'root' , password: 'root' , }, romotePath: '/var/www/dist' , localPath: './dist' , } ] async function main() { const SELECT_CONFIG = (await helper(config)).value // 所选部署项目的配置信息 console.log( '您选择了部署 ' + SELECT_CONFIG.name) sftp .connect(SELECT_CONFIG.ssh) .then(() => { console.log( '- 链接成功,上传中..' ) return sftp.uploadDir(SELECT_CONFIG.localPath, SELECT_CONFIG.romotePath) }) .then(data => { console.log(data, ' 上传完成,及时清除缓存' ) }) . catch (err => { console.log(err, ' 出错了!快看看怎么回事! ' ) }) . finally (() => { sftp.end() // 断开链接 }) } main() |
3.构建和发布
- 执行 npm run deploy 就能够打包并主动上传到你的目标服务器
- windows系统 Git Bash Use arrow keys没法选择
1 | winpty npm.cmd run deploy |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2020-01-05 require('./expample.js).default详解