Vue项目打包完后如何自动上传至服务器

简介: Vue项目打包完后如何自动上传至服务器

前端部署项目方案



前端部署


  1. 通过npm run build,构建前端静态资源文件
  2. 只需上传构建后的资源文件,然后上传至服务器指定目录
  3. 配置相关nginx或者其他相关服务,访问资源文件


服务器部署


  1. 上传前端项目文件
  2. 构建服务器前端环境,一般需要执行npm i,安装构建依赖
  3. 执行package.json中的scripts中配置打包相关命令
  4. 然后将打包的文件放置指定目录中
  5. 配置相关nginx或者其他相关服务,访问资源文件


前端部署VS服务器部署


  1. 服务器部署会通过npm i,安装一系列依赖包,这些依赖包很可能因为服务器上打包环境和本地打包环境不一致出现bug,前端部署本身开发机器已经安装好一切环境了,前端部署来发布其实是比较高效的选择,但我并不推荐这样做,这样源文件(当然源文件也在git或者svn上)是在本地开发者的电脑,而且有的公司会有专门的打包服务器部署
  2. 前端部署,后端部署人员不需要关注前端一些构建命令,以及环境变量等等问题


如何操作


已不见面5.0开标系统为列子


创建连接服务器文件


在根目录创建upload.server.js文件


// 服务器配置信息
const server = {
    host: 'xxx.xxx.xx.xx', // 服务器ip
    port: '22', // 端口一般默认22
    username: 'xxxxx', // 用户名
    password: 'xxxxx', // 密码
    pathNmae: 'bidopen5', // 上传到服务器的位置
    locaPath:'./test/' // 本地打包文件的位置
}
// 引入scp2
const client = require('scp2');
const ora = require('ora');
const spinner = ora('正在发布到服务器...');
const Client = require('ssh2').Client; // 创建shell脚本
const conn = new Client();
console.log('正在建立连接');
conn.on('ready', function () {
    console.log('已连接')
    if(!server.pathNmae){
        console.log('连接已关闭');
        conn.end()
        return false;
    }
    // 这里我拼接了放置服务器资源目录的位置 ,首选通过rm -rf删除了这个目录下的文件
    conn.exec('rm -rf /xxxx/' + server.pathNmae + '/*', function (err, stream) {
        console.log('删除文件');
        stream.on('close', function (code, signal) {
            console.log('开始上传')
            spinner.start();
            client.scp(server.locaPath, {
                "host": server.host,
                "port": server.port,
                "username": server.username,
                "password": server.password, 
                "path": '/xxxx/'+ server.pathNmae
            }, err => {
                spinner.stop();
                if (!err) {
                    console.log('项目发布完毕');
                } else {
                    console.log("err", err)
                }
                conn.end() // 结束命令
            })
        })
    })
}).connect({
    host: server.host,
    port: server.port,
    username: server.username,
    password: server.password
    //privateKey: '' //使用 私钥密钥登录 目前测试服务器不需要用到
});


const client = require('scp2');


scp2是一个命令行工具,可以连接到服务器上,能快速执行文件拷贝、下载、上传等

scp2具体API


constClient = require('ssh2').Client;


ssh2连接服务,能执行一些相关命令等等,其实就使用ssh2也能够完成文件的上传,下载等等,不要用到scp2


ssh2具体API参数github


配置启动项


在package.json中启动


这里我以测试环境为例子


"scripts": {
    "test": "vue-cli-service build --mode test", // 构建测试包
    "upload": "node upload.server.js", // 上传服务器文件
    "publish": "npm run test && npm run upload" // 发布命令(执行以上两个命令)
},


在命令行中执行npm run publish,效果如下


首选执行了vue-cli-service build --mode test命令


image.png

然后在执行完毕后,执行了node upload.server.js


image.png


查看服务器文件也是更新后


image.png

通过webpack执行node脚本



如果你的项目是以vue-cli构建的项目,在vue.config.js中的configureWebpack模块中


configureWebpack:config=>{
         const plugins = [];
    apply:(compiler)=>{
                    // 编译完成后
                    compiler.hooks.done.tap('DonePlugin', compilation => {
                        console.log('编译完成')
                        // 通过配置 package.json , 执行指定node.js脚本
                        exec('npm run upload', {stdio: 'inherit'});
                    });
       }
    return { plugins }
}


compiler.hooks.done.tap 是webpack提供的api,DonePlugin是构建完成的一个指令,详细webpack构建命令,然后在执行node脚本程序


直接通过node执行文件


直接执行的化,需要两步走,一步需要先获得前端编译好的静态资源文件,二步在调用上传脚本


npm run test
node upload.server.js


其实package.json就是执行了指定的node脚本,只不过整理的更有规范了


服务端部署



可以使用Jenkins,具体使用参考,实战笔记:Jenkins打造强大的前端自动化工作流,可视化管理,推荐使用


总结



服务器连接配置应当放在.env.xxx环境文件中做配置,这样可以针对不同的项目自动上传不同环境服务器文件


以上前端部署,只是刚好适应了公司目前前端打包现状

相关文章
|
2月前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
2月前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
3月前
|
JavaScript
如何在 Vue 项目中选择合适的模块格式
【10月更文挑战第20天】选择合适的模块格式需要综合考虑多个因素,没有一种绝对正确的选择。需要根据项目的具体情况进行权衡和分析。在实际选择过程中,要保持灵活性,根据项目的发展和变化适时调整模块格式。
26 7
|
2月前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
3月前
|
JavaScript 前端开发 编译器
在 Vue 项目中使用 ES 模块格式的优点
【10月更文挑战第20天】在 Vue 项目中使用 ES 模块格式具有众多优点,这些优点共同作用,使得项目能够更高效、更可靠地开发和运行。当然,在实际应用中,还需要根据项目的具体情况和需求进行合理的选择和配置。
51 6
|
2月前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
3月前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
90 3
|
存储 JavaScript Shell
vue项目打包后提交到git上为什么没有dist这个文件?
vue项目打包后提交到git上为什么没有dist这个文件?
467 0
vue项目打包后提交到git上为什么没有dist这个文件?
|
12天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
78 1
|
23天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。