package.json

{  "name": "Vue",  "version": "2.0.0",  "description": "",  "main": "index.js",  "directories": {    "test": "webpack4+vue2"  },  "dependencies": {    "animate.css": "^3.7.0",    "babel-preset-es2015": "^6.24.1",    "vant": "^1.6.7",    "vue-hot-reload-api": "^2.3.1",    "vue-html-loader": "^1.2.4",    "vue-lazyload": "^1.2.6",    "vue-resource": "^1.5.1",    "vue-router": "^2.8.1",    "vue-style-loader": "^2.0.5",    "vue2-toast": "^2.0.2"  },  "devDependencies": {    "autoprefixer": "^9.4.9",    "axios": "^0.18.0",    "babel-core": "^6.26.3",    "babel-eslint": "^10.0.1",    "babel-loader": "^7.1.5",    "babel-plugin-import": "^1.11.0",    "babel-plugin-transform-runtime": "^6.23.0",    "babel-polyfill": "^6.26.0",    "babel-preset-env": "^1.7.0",    "babel-preset-react": "^6.24.1",    "babel-preset-stage-0": "^6.24.1",    "babel-runtime": "^6.26.0",    "clean-webpack-plugin": "^1.0.0",    "css-loader": "^1.0.1",    "eslint": "^5.9.0",    "eslint-plugin-flowtype": "^3.2.0",    "expose-loader": "^0.7.5",    "file-loader": "^2.0.0",    "html-webpack-plugin": "^3.2.0",    "html-withimg-loader": "^0.1.16",    "install": "^0.12.2",    "jquery": "^3.3.1",    "less": "^3.8.1",    "less-loader": "^4.1.0",    "mini-css-extract-plugin": "^0.5.0",    "node-sass": "^4.11.0",    "postcss": "^7.0.14",    "postcss-loader": "^3.0.0",    "sass-loader": "^7.1.0",    "style-loader": "^0.23.1",    "timeago.js": "^4.0.0-beta.2",    "uglifyjs-webpack-plugin": "^2.0.1",    "url-loader": "^1.1.2",    "vue": "^2.6.6",    "vue-bus": "^1.2.0",    "vue-loader": "^15.4.2",    "vue-template-compiler": "^2.6.6",    "vue-timeago": "^5.1.2",    "vuex": "^3.1.0",    "webpack": "^4.26.0",    "webpack-cli": "^3.1.2",    "webpack-dev-server": "^3.1.10"  },  "scripts": {    "test": "webpack --mode=development --progress --colors --config ./webpack.test.config.js",    "dev": "webpack --mode=development --progress --colors --config ./webpack.dev.config.js",    "test-w": "webpack --mode=development --progress --colors --config ./webpack.test.config.js --watch",    "dev-w": "webpack --mode=development --progress --colors --config ./webpack.dev.config.js --watch",    "build": "webpack --mode=production --progress --colors --config ./webpack.prod.config.js --watch",    "prod": "webpack --mode=production --progress --colors --config ./webpack.prod.config.js"  },  "babel": {    "presets": [      "env"    ]  },  "author": "LF",  "license": "ISC"}

postcss.config.js

/* * @Author: yang * @Date: 2020-10-18 15:58:57 * @LastEditors: yang * @LastEditTime: 2020-10-18 16:10:01 * @FilePath: \gloud-h5\postcss.config.js */module.exports = {  plugins: [    require('autoprefixer')({      overrideBrowserslist: [        "Android 4.1",        "iOS 7.1",        "Chrome > 31",        "ff > 31",        "ie >= 8"        //'last 10 versions', // 所有支流浏览器最近10版本用    ],grid: true})  ]   }

.gitignore

node_modules/npm-debug.log.idea/dist/.html

webpack.base.config.js

/* * @Author: yang * @Date: 2020-10-18 15:58:57 * @LastEditors: yang * @LastEditTime: 2020-10-18 16:01:02 * @FilePath: \gloud-h5\webpack.base.config.js *//** * Created by Lee on 2019/2/13. */let HtmlWebpackPlugin = require('html-webpack-plugin')require('babel-polyfill')let entry = {    index: ['babel-polyfill', './src/views/index.js'],}let plugins = []Object.keys(entry).forEach(function(e) {    let plugin = new HtmlWebpackPlugin({        template: `./src/views/${e}.html`,        filename: `../${e}.html`,        hash: true,        chunks: [e, 'common'],    })    plugins.push(plugin)})module.exports = {    entry,    plugins,}

webpack.dev.config.js

let webpack = require('webpack');let path = require('path');let HtmlWebpackPlugin = require('html-webpack-plugin');let CleanWebpackPlugin = require('clean-webpack-plugin');const VueLoaderPlugin = require('vue-loader/lib/plugin');const uglifyjs = require('uglifyjs-webpack-plugin');let config = require('./webpack.base.config')module.exports = {    entry: config.entry,    //入口文件输入配置 (即入口文件最终要生成什么名字的文件、寄存到哪里)    output: {        path: path.resolve('dist'),        publicPath: './dist/',        filename: '[name].js',    },    module: {        rules: [            {                test: require.resolve('jquery'),                use: [{                    loader: 'expose-loader',                    options: 'jQuery'                }, {                    loader: 'expose-loader',                    options: '$'                }]            },            {test: /\.vue$/, loader: 'vue-loader'},            {test: /\.js$/, exclude: /node_modules/,loader: 'babel-loader'},            {                test: /\.(png|jpg|gif)$/,                use: [{                    loader: 'url-loader',                    options: {                        limit: 8192,                        outputPath: 'images/'                    }                }]            },            {                test: /\.css$/,                use: ["style-loader", "css-loader", "postcss-loader"]            },            {                test: /\.scss$/,                use: [                    'style-loader',                    'css-loader',                    'postcss-loader',                    'sass-loader',                ]            },            {test: /\.(eot|svg|ttf|woff|woff2)\w*/, loader: 'file-loader'}        ]    },    optimization: {        splitChunks: {            cacheGroups: {                vendor: {                    name: 'common',                    chunks: 'initial',                    minChunks: 2,                }            }        }    },    plugins: [        new CleanWebpackPlugin(['dist']),//打包前删除dist        new VueLoaderPlugin(),        new uglifyjs(),        new webpack.DefinePlugin({            'base_api': '"http://xiaowoxuetang.com/"',        }),        ...config.plugins],//解决vue报错resolve: {    extensions: ['.js', '.vue'],        alias:{'vue$': 'vue/dist/vue.common.js',}},// devServer: {//     contentBase: './dist',//     host: 'localhost',      // 默认是localhost//     port: 8000,             // 端口//     open: true,             // 主动关上浏览器//     hot: true,               // 开启热更新//     compress: true,// },mode: 'development'      // 模式配置;development}

webpack.prod.config

/* * @Author: yang * @Date: 2020-10-18 15:58:57 * @LastEditors: yang * @LastEditTime: 2020-10-18 16:31:02 * @FilePath: \gloud-h5\webpack.prod.config.js */let webpack = require('webpack');let path = require('path');let HtmlWebpackPlugin = require('html-webpack-plugin');let CleanWebpackPlugin = require('clean-webpack-plugin');const VueLoaderPlugin = require('vue-loader/lib/plugin');const uglifyjs = require('uglifyjs-webpack-plugin');let config = require('./webpack.base.config')module.exports = {    // entry: {    //     index: './src/index.js', //首页入口JS    //     // share: './src/share.js'    // },    entry:config.entry,    //入口文件输入配置 (即入口文件最终要生成什么名字的文件、寄存到哪里)    output: {        path: path.resolve('dist'),        publicPath: './dist/',        filename: '[name].js',    },    module: {        rules: [            { test: require.resolve('jquery'),                 use: [{                    loader: 'expose-loader',                    options: 'jQuery'                }, {                    loader: 'expose-loader',                    options: '$'                }]            },            { test: /\.vue$/, loader: 'vue-loader' },            // { test: /\.css$/, loader: 'style-loader!css-loader' },            {                test: /\.css$/,                use: ["style-loader", "css-loader", "postcss-loader"]            },            {                test: /\.scss$/,                use: [                    'style-loader',                    'css-loader',                    'postcss-loader',                    'sass-loader',                ]            },            { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' ,},            { test: /\.(png|jpg|gif)$/,                 use: [{                    loader: 'url-loader',                    options: {                        //当加载的图片小于limit时,会将图片编译成base64字符串的格局(limit单位 byte)                        //当加载的图片大于limit时,须要应用url-loader模块进行加载 输出门路 outputPath                        limit: 8192,                           outputPath: 'images/'                       }                }]            },            { test: /\.(eot|svg|ttf|woff|woff2)\w*/, loader: 'file-loader' }        ]    },    optimization: {        splitChunks: {          cacheGroups: {//默认的规定不会打包,须要独自定义缓存策略,默认设置了宰割node_modules和专用模块。外部的参数能够和笼罩内部的参数            vendor: {              name: 'common',//宰割的js名称              chunks: 'initial',//也会同时打包同步和异步,然而异步外部的引入不再思考,间接打包在一起,会将vue和b的内容间接打包成chunk,              minChunks: 2,//最小专用模块次数            }          }        }    },    plugins: [            new CleanWebpackPlugin(['dist']),//打包前删除dist        new VueLoaderPlugin(),        new uglifyjs(),        new webpack.DefinePlugin({            'base_api': '"http://xiaowoxuetang.com/',        }),        ...config.plugins,    ],            //解决vue报错    resolve: {        extensions: ['.js', '.vue'],        alias: {          'vue$': 'vue/dist/vue.common.js',        }    },    mode: 'production'      // 模式配置;development}