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文件

  {     "scripts": {         "serve": "webpack -w --config ./config/webpack.dev.js",         "build": "webpack  --config ./config/webpack.prod.js"         }   } 即可npm run serve npm run build发布 引入webpack-html-plugin用于拆分模板文件
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;

相关