项目准备

1. 配置 alias 别名

使用vue-cli开发项目,最大特色是组件化。组件中频繁引用其他组件或插件。我们可以把一些常用的路径定义成简短的名字。方便开发中使用。

//加载path模块
const path = require('path')
//定义resolve方法,把相对路径转换成绝对路径
const resolve = dir => path.join(__dirname, dir)module.exports = {chainWebpack: config => {// 添加别名config.resolve.alias.set('@', resolve('src')).set('assets', resolve('src/assets')).set('api', resolve('src/api')).set('views', resolve('src/views')).set('components', resolve('src/components'))}
}

注意:对于图片我们要在路径前面加~

<img src="~@/assets/img/logo.png" alt="">

2. 项目结束后打包前webpack配置

module.exports = {// 静态资源路径(默认/,打包后会白屏)publicPath: './', //去除生产环境的productionSourceMapproductionSourceMap: false,
}

3. 生成打包报告

  "scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build --report"}

之后你运行npm run build就会出现一个report.html,运行到浏览器后可以清除的看见文件的体积大小

打包

1. 去除console.log()输出打印

下载插件
cnpm i babel-plugin-transform-remove-console -D
babel.config.js文件
//项目发布阶段需要用到的babel插件
const productPlugins = []//判断是开发还是发布阶段
if(process.env.NODE_ENV === 'production'){//发布阶段productPlugins.push("transform-remove-console")
}module.exports = {"presets": ['@vue/cli-plugin-babel/preset'],"plugins": [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}],...productPlugins]
}

2. 使用cdn

在项目中我是创建了两个入口文件main-dev.js(开发入口文件)和main-prod.js(生产入口文件)

vue.config.js
module.exports = {chainWebpack:config=>{//发布模式config.when(process.env.NODE_ENV === 'production',config=>{//entry找到默认的打包入口,调用clear则是删除默认的打包入口//add添加新的打包入口config.entry('app').clear().add('./src/main-prod.js')//使用externals设置排除项config.set('externals',{vue:'Vue','vue-router':'VueRouter',axios:'axios',lodash:'_',echarts:'echarts',nprogress:'NProgress','vue-quill-editor':'VueQuillEditor'})})//开发模式config.when(process.env.NODE_ENV === 'development',config=>{config.entry('app').clear().add('./src/main-dev.js')})}
}

打开开发入口文件main-prod.js,删除掉默认的引入代码

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// 引入element-ui
// import ElementUI from 'element-ui';
// import 'element-ui/lib/theme-chalk/index.css';
// 重置样式
import '@/assets/reset.css'
import '@/assets/common.css'// 全局注册树形表格
import TreeTable from 'vue-table-with-tree-grid'
// 导入富文本编辑器
import VueQuillEditor from 'vue-quill-editor'
// 导入富文本编辑器样式
// import 'quill/dist/quill.core.css'
// import 'quill/dist/quill.snow.css'
// import 'quill/dist/quill.bubble.css'//导入进度条样式
// import 'nprogress/nprogress.css'Vue.config.productionTip = false
// Vue.use(ElementUI);// 全局注册富文本编辑器
Vue.use(VueQuillEditor)
// 全局注册表格树
Vue.component('tree-table',TreeTable)// 全局时间过滤器
Vue.filter('formTime',(val)=>{let t = new Date(val)let y = t.getFullYear()let m = t.getMonth() + 1let d = t.getDate()let h = t.getHours()let f = t.getMinutes()let s = t.getSeconds()// 定义一个添0函数function addZero(val) {return val > 10 ? val : '0' + val}return `${addZero(y)}-${addZero(m)}-${addZero(d)} ${addZero(h)}:${addZero(f)}:${addZero(s)}`
})new Vue({router,store,render: h => h(App)
}).$mount('#app')

然后打开public/index.html添加外部cdn引入代码

   <!-- nprogress 的样式表文件 --><link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" /><!-- 富文本编辑器 的样式表文件 --><link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css" /><link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css" /><link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css" /><!-- element-ui 的样式表文件 --><link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.15.6/theme-chalk/index.css" /><script src="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script><script src="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script><script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script><script src="https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js"></script><script src="https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js"></script><script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script><!-- 富文本编辑器的 js 文件 --><script src="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script><script src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script><!-- element-ui 的 js 文件 --><script src="https://cdn.staticfile.org/element-ui/2.15.6/index.js"></script>

当我们开发环境的时候是不需要cdn加载的,使用插件判断是否为发布环境并定制首页内容

module.exports = {chainWebpack:config=>{config.when(process.env.NODE_ENV === 'production',config=>{......//使用插件config.plugin('html').tap(args=>{//添加参数isProdargs[0].isProd = truereturn args})})config.when(process.env.NODE_ENV === 'development',config=>{config.entry('app').clear().add('./src/main-dev.js')//使用插件config.plugin('html').tap(args=>{//添加参数isProdargs[0].isProd = falsereturn args})})}
}

然后在public/index.html中判断

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="icon" href="<%= BASE_URL %>favicon.ico"><title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>电商后台管理系统</title><% if(htmlWebpackPlugin.options.isProd){ %><!-- nprogress 的样式表文件 --><link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" />........<!-- element-ui 的 js 文件 --><script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script><% } %></head>.......

项目上线

1. 通过node创建服务器
在src文件下创建一个server文件,在终端server文件中打开输入:

npm init -y  会生成一个package.json

初始化包之后,输入

npm i express -S

之后将打包生成的dist文件夹放置到server文件下,再创建一个app.js

app.js文件
const express = require('express')const app = express()app.use(express.static('./dist'))app.listen(8998,()=>{console.log("server running at http://127.0.0.1:8998")
})

在终端中输入node app.js启动服务器,输入服务器的地址(http://127.0.0.1:8998)就可以访问到你的项目了。

2. 使用pm2管理应用

启动服务器后我们关闭黑窗口后服务器就会停止,如果不想一直打开黑窗口可以使用pm2进行管理。
打开server文件夹,打开终端输入:

npm i pm2 -g
使用pm2启动项目,在终端中输入命令:pm2 start app.js --name 自定义名称
查看项目列表命令:pm2 ls
重启项目:pm2 restart 自定义名称
停止项目:pm2 stop 自定义名称
删除项目:pm2 delete自定义名称

打包中遇见的问题

vue 项目上线打包后 出现 Error:if there‘s nested data,rowKey is required

解决办法:
package.json 里面的element-ui的版本,必须要跟public/index.html中的CDN引入的版本保持一致

vue后台管理系统打包上线到node相关推荐

  1. vue后台管理系统搭建

    vue后台管理系统搭建 前提 安装node.js 控制台安装yarn:npm install -g yarn 查看yarn版本:yarn --version 注:-g表示的是全局安装 淘宝镜像安装:n ...

  2. 正确姿势开发vue后台管理系统

    项目地址 vue-admin-webapp 欢迎star,fork 前言 相信许多人和我一样刚接触 vue 时看文档都很枯燥,看完 vue,还有 vueRouter .vuex .vue-cli.es ...

  3. VUE后台管理系统权限管理

    VUE后台管理系统权限管理(面试路由守卫) 1.背景 后台管理系统中总会遇到权限分配的问题:这也是一道vue的很经典的面试问题 2.解决思路 权限管理无非前端或者后台解决 先说一下前端解决的思路:在设 ...

  4. 12款vue后台管理系统(可下载)

    vue官方的后台管理仪表盘框架是:vue-admin,除此之外还有很多其他优秀的后台管理集成框架,正所谓前人栽树,后人乘凉.特此记录一下,方面以后要用. 参考下载地址:12款优秀的vue后台管理系统模 ...

  5. 哔哩哔哩Allen前端vue后台管理系统笔记

    哔哩哔哩Allen前端vue后台管理系统笔记 Element ui 引入 全局引入 按需引入 嵌套路由 左侧菜单栏的样式 Container布局,左侧菜单栏commonAside组件 commonAs ...

  6. vue cli3.0打包上线不同环境

    vue cli3.0打包上线不同环境 1. cli3.0支持".env"文件配置,在项目的根目录下配置".env"文件,根据不同的环境命名不同的文件名称,如: ...

  7. 一套通用的VUE后台管理系统方案(vite+Vue3+ts)

    通用后台管理系统整体架构方案(Vue) 项目创建,脚手架的选择(vite or vue-cli) vue-cli基于webpack封装,生态非常强大,可配置性也非常高,几乎能够满足前端工程化的所有要求 ...

  8. vue后台管理系统实践方案总结(一)

    项目概述 基本业务概述 根据不同的应用场景,电商系统一般都提供了PC端.移动APP.移动Web.微信小程序等多种终端访问方式 管理系统功能 电商后台管理系统用于管理账号.商品分类.商品信息.订单.数据 ...

  9. 看看人家 SpringBoot + vue后台管理系统,多么优雅...

    如何写一个优雅的项目?为了让更多人学习前后端分离项目,特意录制了一个基于Spring security + Jwt + Vue的前后端分离后台管理系统VueAdmin,手把手完整教学,另外还写了两篇完 ...

最新文章

  1. 【Android】java.lang.AssertionError use looper thread, must call Looper.prepare() first!异常分析
  2. 保存设置_如何设置石材雕刻机原点及断电后怎么保存原点坐标?
  3. jquery 获取前两个table里的每个tr里面的第二个td
  4. 转载-如何应对在线故障
  5. 印度电工,真牛!上天入海,无所不能...
  6. 需求简报_代码简报:NASA将所有研究成果发布为开放数据
  7. linux raid livecd,liveCD,liveDVD,binDVD版本区别Centos
  8. 整理好的200多java面试题,可用于机器学习
  9. python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...
  10. 八、关于FFmpeg需要絮叨的一些事
  11. 冒险者传说pc6java_我的世界之冒险者传说整合包游戏
  12. javascript 实现英文首字母大写
  13. gif动图怎么制作?gif动图制作软件推荐
  14. 计算机网络网桥模拟课程设计,网桥模拟实验
  15. 支持多种视频格式的html网页视频播放器代码
  16. 关于浏览器的几个高度和宽度
  17. 欧美slots游戏 源码(完整)
  18. 原味的SM3密码杂凑算法
  19. 提问技巧(特别适用IT)
  20. 百度云加速边缘计算功能设置判断移动端跳转

热门文章

  1. 【四二学堂】WeGame导致电脑蓝屏!!刚开始怀疑是他搞的鬼,现在发现出现问题的不止我一个....
  2. Hive案例 学生成绩表综合案例
  3. 基于51的单片机GPS定位系统设计
  4. 万福之地——和珅恭王府蝙蝠纹样解读…
  5. Cesium学习四:使用entity绘制polygon
  6. 数字电子钟的设计与制作
  7. 笔记本电脑拔掉电源自动切换性能模式
  8. 渝粤题库 陕西师范大学《西方文论》作业
  9. BigBrother的大数据之旅Day 15 sqoop
  10. 介绍一下什么是大数据