vue后台管理系统记录-基础配置
基于vue + element-ui 后台管理系统
技术栈: vue webpack vuex vue-router ,element-ui axios es6 ESModule sass
单页面应用
性能优化: js css压缩,拆分打包js库文件 js模块 css文件 所有静态资源添加指纹
开始:
1.创建admin后台管理系统目录 admin文件下创建config配置文件包含webpack.dev.js开发配置,webpack.prod.js发布配置,创建public静态目录 下创建index.html模板文件,在index.html中定义视图div#app,创建开发目录src创建components组件 views目录页面 tools目录工具插件 store目录下index.js 创建vuex文件,main.js为src的入口文件, router路由文件index.js App.vue应用程序组件
2.在main.js文件下引入vue 引入App.vue 实例化Vue渲染应用程序App到div#app上,在引入router和store
store引自src目录下的store router引自src目录下的的router
1要在vue实例化中注册store,注册router对App补全代码div#app及代码
2要在store的入口文件index.html中引入vue vuex和vuex 解构vuex中的Store,安装Vuex 暴露接口 Store实例化对象 ,里面有许多参数 state静态数据, mutations 同步消息队列 actions异步消息队列等
3要在router的入口文件index.html中引入vue 和 vue-router 安装Router 暴露接口 Router实例化对象并在其中定义路由规则routes
书写webpack.dev.js
使用elementui要配置ttf woff加载机图标
简化开发配置,发布配置指令操作在src外部 admin里面创建一个package.json文件
let HtmlWebpackPlugin= require('html-webpack-plugin') // 引入path
let path = require('path');
// 定义根目录
let root = process.cwd();
// 引入vue-loader模块
let {VueLoaderPlugin} = require('vue-loader');
// 引入webpack-html-plugin
let HtmlWebpackPlugin= require('html-webpack-plugin')
// 拆分css
let MiniCssExtractPlugin = require('mini-css-extract-plugin');
// 暴露接口
module.exports = {
// 配置环境
mode: 'development',
// 解决问题
resolve: {
alias: {
'@':path.join(root, './src/'),
'@v':path.join(root, './src/views'),
'@c':path.join(root, './src/components/'),
'@t':path.join(root, './src/tools/'),
},
// 配置默认拓展名
extensions:['.js', '.vue']
},
// 入口
entry: path.join(root, './src/main.js'),
// 出口
output: {
// 我们将静态资源发布到server/static/admin目录下
path: path.join(root, '../server/static/admin'),
// 我们将模板资源发布到server/views/admin.html文件中
filename:'./[name].js',
// 更改模板文件中引入的相对位置
publicPath: '/static/admin/'
},
module: {
// 定义规则
rules: [
// vue
{
test: /\.vue$/,
use:['vue-loader']
},
// 配置css
{
test: /\.css$/,
use: [
'style-loader',
MiniCssExtractPlugin.loader,
'css-loader'
]
},
// 配置less
{
test: /\.less$/,
use: [
'style-loader',
MiniCssExtractPlugin.loader,
'css-loader',
'less-loader'
]
},
// 配置scss
{
test: /\.scss$/,
use: [
'style-loader',
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader'
]
},
// 小图标
{
test:/\.(ttf|woff)$/,
use:['url-loader']
},
// 图片
{
test:/\.(png|jpg|gif)$/,
use:['url-loader']
}
]
},
plugins: [
new VueLoaderPlugin(),
// 拆分模板文件
new HtmlWebpackPlugin({
//找到模板文件的位置
template: path.join(root, './public/index.html'),
// 指定发布的位置
filename: path.join(root, '../server/views/admin.html'),
// 设置hash
hash: true
}),
// 拆分css
new MiniCssExtractPlugin({
// 发布的位置是相对于path来说的
filename: './style.css'
})
],
// 优化
optimization: {
// 拆分文件
splitChunks: {
// 缓存分组
cacheGroups: {
lib: {
// 名称
name: 'lib',
chunks: 'initial',
// 特征
test: /node_modules/
}
}
}
}
}
webpack.prod.js
// 导入webpack.dev.js文件 let devObject = require('./webpack.dev.js'); // 改变环境 压缩js devObject.mode = 'production'; // 压缩css let OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin'); devObject.plugins.push(new OptimizeCssAssetsWebpackPlugin() ); // 暴露接口 module.exports = devObject;

浙公网安备 33010602011771号