• webpack从零构建一个vue+element项目


    webpack从零构建一个vue+element项目

    利用webpack+vue+element实现一个简易书签收藏,利用css媒体查询做了简单的响应式处理
    实现效果 网页版和移动版



    文件目录配置
    ├─config	// webpack配置文件
    ├─dist		// 单入口打包输入文件
    │  ├─css
    │  ├─fonts
    │  ├─images
    │  │  ├─icon
    │  │  └─logos
    │  └─js
    └─src		
        ├─images	
        │  ├─icon
        │  └─logos
        ├─pages		// 页面文件
        ├─public	// index.html模板 
        ├─router	// 路由配置
        ├─static	// 静态资源
        │  ├─fonts	// 文字
        │  └─images	// 图片
        |-- App.vue // 挂载模板	
        |-- main.js // 入口文件
        └─style		// 样式
    
    package.json
    {
      "name": "webpack-vue-ele",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack --config ./config/webpack.pro.js",
        "dev": "webpack-dev-server --inline --progress --config  ./config/webpack.dev.js"
      },
      "keywords": [],
      "author": "bairujie",
      "license": "ISC",
      "devDependencies": {
        "@babel/core": "^7.16.0",	// 处理js兼容
        "@babel/preset-env": "^7.16.4",  // 处理js兼容
        "autoprefixer": "^10.4.0",  // 自动补全浏览器前缀
        "babel-loader": "^8.2.3",	// 处理js兼容loader
        "clean-webpack-plugin": "^4.0.0",	// 清空dist目录
        "copy-webpack-plugin": "^4.0.1",	// 拷贝静态资源到dist目录
        "css-loader": "^1.0.1",		// 处理css的loader
        "css-minimizer-webpack-plugin": "^1.1.5",	// 压缩css
        "file-loader": "^1.1.6",	// 处理文件的loader
        "friendly-errors-webpack-plugin": "^1.7.0",	  // 友好提示插件
        "html-loader": "^3.0.1",	// 处理html的loader
        "html-webpack-plugin": "^3.2.0",	// 处理index.html模板
        "jquery": "^3.6.0",		// 测试js抽离引入的jq测试
        "less": "^3.9.0",		// 引入less
        "less-loader": "^5.0.0",	// 引入处理less的loader
        "mini-css-extract-plugin": "^0.9.0",	// 抽离css的插件
        "node-notifier": "^5.1.2",		// 弹窗提示
        "nprogress": "^0.2.0",			// 进度提示
        "portfinder": "^1.0.13",		// 处理端口号
        "postcss": "^8.4.4",			// 处理css
        "postcss-loader": "^4.0.3",		// 处理css
        "style-loader": "^0.23.1",		// 转化为style标签输出
        "uglifyjs-webpack-plugin": "^2.2.0",	// 处理js压缩
        "url-loader": "^0.6.2",			// 处理路径
        "vue": "^2.6.11",				// vue
        "vue-loader": "^15.9.8",		// 处理vue
        "vue-router": "^3.5.3",			// vue路由
        "vue-template-compiler": "^2.6.14",		// 处理vue模板
        "webpack": "^4.41.5",			// webpack4
        "webpack-cli": "^3.3.10",		// webpackcli
        "webpack-dev-server": "^3.10.1",	// 热更新
        "webpack-merge": "^4.1.0",			// webpack处理合并
        "workbox-webpack-plugin": "^6.4.2"	// 离线网页缓存插件
      },
      "dependencies": {
        "element-ui": "^2.15.6"				// element-ui
      }
    }
    
    
    webpack.base.js
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    const {
        CleanWebpackPlugin
    } = require('clean-webpack-plugin');
    const VueLoaderPlugin = require("vue-loader/lib/plugin");
    const CopyWebpackPlugin = require("copy-webpack-plugin");
    
    module.exports = {
        entry: './src/main.js', // 单入口打包
        output: {
            path: path.join(__dirname, '../dist'),
            filename: 'js/[name].bundle.js',	// 打包出去的js存放目录
        },
        module: {
            rules: [{
                    test: /\.vue/,
                    loader: 'vue-loader'
    
                },
                {
                    test: /\.js$/,
                    exclude: /(node_modules)/,
                    use: {
                        loader: 'babel-loader',
                        options: {
                            presets: ['@babel/preset-env']
                        }
                    }
                },
                {
                    test: /\.(css|less)$/,
                    use: [{
                            loader: MiniCssExtractPlugin.loader,
                            options: {
                                // you can specify a publicPath here
                                // by default it use publicPath in webpackOptions.output
                                publicPath: '/'
                            }
                        },
                        "css-loader",
                        "less-loader",
                        "postcss-loader"
                    ]
                },
                {
                    test: /\.(png|jpg|gif|jpe?g)$/i,
                    use: [{
                            loader: 'file-loader',
                            options: {
                                limit: 8 * 1024,
                                // url使用es6解析,与html-loader冲突,需要关闭
                                // esModule: false,
                                encoding: "base64",
                                publicPath: '../',
                                name: "images/[name].[ext]",
                            }
                        },
                        
                    ]
                },
                {
                    test: /\.(eot|woff|svg|ttf|woff2|appcache|ico)(\?|$)/,
                    exclude: /^node_modules$/,
                    loader: "file-loader",
                    options: {
                        name: "fonts/[name].[ext]"
                    }
                },
            ],
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: './src/public/index.html',	// 模板文件入口
                filename: 'index.html',
            }),
            new MiniCssExtractPlugin({
                filename: "css/[name].css",
                // chunkFilename: "[id].css"
            }),
            new CopyWebpackPlugin([{
                from: "./src/images", 
                to: "images" // 打包出去的images存放目录
            }]),
            new CleanWebpackPlugin(),
            new VueLoaderPlugin()
        ],
    }
    
    
    愿以往所学皆有所获
  • 相关阅读:
    Python中的赋值(复制)、浅拷贝与深拷贝
    review
    Python网络编程
    云计算网络 ASW DSW CSW LSW
    Python文件操作 I/O
    RSI 指标
    python 常见模块
    Python模块和包
    读利弗莫尔
    GDP、CPI、M2
  • 原文地址:https://www.cnblogs.com/Azune/p/15641004.html
Copyright © 2020-2023  润新知