• Vue二手书商城:(三)项目中的webpack配置


    webpack官方文档LOADERS: https://webpack.js.org/loaders/ 
    webpack插件:https://webpack.js.org/plugins/
    babel官方文档:https://babeljs.io/docs/en/
    babel到底该如何配置:https://segmentfault.com/a/1190000011665642

    一.package.json

    babel

    • 转换规则:@babel/core、babel-loader

    • 语法:@babel/preset-env

    css/less

    • css-loader解析@import和url(),依赖于style-loader

    • less-loader依赖于less、css-loader、style-loader

    url

    • url-loader以文件内容的 MD5 哈希值生成新文件名,并保留所引用资源的原始扩展名,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL,依赖于file-loader

    vue

    • vue-loader解析vue文件,依赖于vue-template-compiler(跳转官方文档)

    • vue、vue-router路由、vuex全局组件共享数据、axios发请求 <!--more-->

    生产环境的webpack配置需要的包

    • html-webpack-plugin根据你自己的html模板打包出一个html文件,它会使用link/script标签引入你用webpack打包后的相关css/js文件。还可以压缩html文件

    • mini-css-extract-plugin将css从js中抽取出来,如果不用它,打包之后css会和js混在一起

    • optimize-css-assets-webpack-plugin压缩css

    • terser-webpack-plugin压缩js

    webpack

    • webpack4依赖于webpack-cli

    • webpack-dev-server实时打包

    UI

    PS:对css/js的抽取压缩还有其他的插件,部分在webpack4已被弃用,具体可自行查找官方文档。

    二.webpack.config.js

     1 //webpack是基于Node构建的,webpack的配置文件支持Node代码
     2 const path = require('path');
     3 //根据模板生成一个HTML5文件
     4 const htmlWebpackPlugin = require('html-webpack-plugin');
     5 const VueLoaderPlugin = require( 'vue-loader/lib/plugin')
     6  7 module.exports = {
     8   entry: path.join(__dirname, './src/main.js'), //入口文件
     9   output: {//输出配置
    10     path: path.join(__dirname, './dist'), //输出路径
    11     filename: 'js/bundle.js' //输出文件名称
    12   },
    13   module: {//配置第三方loader模块
    14     rules: [//第三方模块匹配规则
    15       {//处理CSS文件
    16         test: /.css$/,
    17         use: ['style-loader', 'css-loader']
    18       },
    19       {//处理less文件
    20         test: /.less$/,
    21         use: ['style-loader', 'css-loader', 'less-loader']
    22       },
    23       {//处理图片路径,引用图片大小小于limit值(byte),则会被转为base64格式的字符串
    24         test: /.(jpg|png|gif|bmp|jpeg)$/,
    25         use: 'url-loader?limit=5300&name=img/[name].[ext]'
    26       },
    27       {//处理字体文件 
    28         test: /.(ttf|eot|svg|woff|woff2)$/,
    29         use: 'url-loader?limit=30000&name=resource/[name].[ext]'
    30       },
    31       {//配置Babel转换高级的ES语法,不转换node_modules文件夹下的
    32         test: /.js$/,
    33         use: 'babel-loader',
    34         exclude: /node_modules/
    35       },
    36       {//处理vue文件
    37         test: /.vue$/,
    38         use: 'vue-loader'
    39       }
    40     ]
    41   },
    42   plugins: [//插件配置
    43     new htmlWebpackPlugin({
    44       template: path.join(__dirname, './src/index.html'),//指定模板文件路径
    45       filename: 'index.html' //设置生成页面的名称
    46     }),
    47     new VueLoaderPlugin()
    48   ],
    49   mode: 'development',//webpack4.x要加上mode,为development/production/none
    50   devServer: { port: 9000 }//在localhost:9000打开
    51 };

    三.webpack.prod.js

     1 const path = require('path')
     2 const webpack = require('webpack')
     3 const htmlWebpackPlugin = require('html-webpack-plugin')
     4 const VueLoaderPlugin = require( 'vue-loader/lib/plugin')
     5 const TerserPlugin = require('terser-webpack-plugin')
     6 const MiniCssExtractPlugin = require('mini-css-extract-plugin')
     7 const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
     8  9 module.exports = {
    10   entry: './src/main.js',
    11   output: {
    12     filename: 'js/[name].js',
    13     path: path.join(__dirname, 'dist')
    14   },
    15   module: {
    16     rules: [
    17       {
    18         test: /.(le|c)ss$/,
    19         use: [
    20           {
    21             loader: MiniCssExtractPlugin.loader,
    22             options: {//样式文件中url()使用相对地址,打包时在图片地址前加../
    23               publicPath: '../'
    24             }
    25           },
    26           'css-loader',
    27           'less-loader'
    28         ]
    29       },
    30       {
    31         test: /.(png|gif|bmp|jpg|jpeg)$/,
    32         use: 'url-loader?limit=5300&name=img/[name].[ext]'
    33       },
    34       {
    35         test: /.(ttf|eot|svg|woff|woff2)$/,
    36         use: 'url-loader?limit=30000&name=resource/[name].[ext]'
    37       },
    38       {
    39         test: /.js$/,
    40         use: 'babel-loader',
    41         exclude: /(node_modules)/
    42       },
    43       {
    44         test: /.vue$/,
    45         use: 'vue-loader'
    46       }
    47     ]
    48   },
    49   plugins: [
    50     new htmlWebpackPlugin({
    51       template: './src/index.html',
    52       filename: 'index.html',
    53       favicon: './favicon.ico',
    54       minify: {//压缩html
    55         collapseWhitespace: true,
    56         removeComments: true,
    57         removeAttributeQuotes: true
    58       }
    59     }),
    60     new MiniCssExtractPlugin({//从JS中提取CSS
    61       filename: 'css/styles.css'
    62     }),
    63     new VueLoaderPlugin(),
    64   ],
    65   optimization: {//压缩JS,压缩CSS
    66     minimizer: [new TerserPlugin(), new OptimizeCSSAssetsPlugin()],
    67     splitChunks: {//webpack自带插件,可以将公共模块提取出来
    68       chunks: 'all',
    69       cacheGroups: {
    70         vendors: {
    71           name: 'vendors',//提取成vendors.js文件
    72           test: /(vue|vue-router|vuex|axios|mint-ui)/,
    73           priority: -10
    74         }
    75       }
    76     }
    77   },
    78   mode: 'production'
    79 }

    四..babelrc

    preset:配置转译语法 plugin:配置插件

     

    配置内容也可以写在webpack配置文件里。

     

    自行选择是否使用babel-runtime等其他babel插件:https://webpack.js.org/loaders/babel-loader/

     

    五.打包后的文件夹

     

  • 相关阅读:
    范例-项目-.NET-PetShop-4.0-架构设计:目录、PetShop概述
    汉语-词语:立志
    汉语-汉字:被
    汉语-成语:被褐怀珠
    汉语-成语:被褐怀玉
    汉语-成语:被褐藏辉
    汉语-词语:处世
    使用exp&imp工具进行数据库备份及恢复
    oracle创建表空间-用户-角色-授权
    linux下单独安装oracle12.1客户端
  • 原文地址:https://www.cnblogs.com/M-M-Monica/p/10526115.html
Copyright © 2020-2023  润新知