• webpack基本配置


    1.处理js语法及校验

    @babel/core(核心包)
    @babel/preset-env转化高级语法)
    @babel/plugin-proposal-decoreators(转化es7语法)
    @babel/plugin-proposal-class-properties(处理class的语法)
    @babel/runtime(用在生产环境)
    @babel/plugin-reansform-runtime(优化regeneratorRuntime转化更高语法,不能处理inchudes('foo'),用@babel/polyfill【用于生产环境】)

    2.全局变量引入问题
    方法一:不会暴露window
    import $ from 'jquery'
    方法二:全局暴露(window)

    import $ from 'expoes-loader?$?jquery'()
    {
      test: require.resolve('jquery')
      use: 'expose-loader?$'
    }

    方法三: 在每个模块中注入$元素

    new wepack.ProvedePlugin({
      $: 'jquery'
    })
    引入不打包
    externals: {
      jquery: '$'
    }

    loader处理的指定目录:outputPath: ''
    loader处理的指定域名:publicPath: ''

    3.css抽离优化
    const MiniCssExtractPlugin = require('min-css-extract-plugin')


    4.css,js,html压缩优化

    const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
    const TerserWebpackPlugin = require('terser-webpack-plugin')
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    optimization: { // 优先项
      splitChunks:{ //分割代码块
        cacheGroups: { //缓存组
          common: { // 公共的模块
            chunks: 'initial', //从哪里开始
            minSize: 0, // 文件大于0
            minChunks: 2 //用了2次
          },
          vendor: { // 抽离第三方插件
            priority: 1, // 优先权重
            test:/node_modules/,
            chunks: 'initial', //从哪里开始
            minSize: 0, // 文件大于0
            minChunks: 2 //用了2次
          }
        }
      },
      minimizer: {
        new TerserWebpackPlugin({ //js压缩优化
          cache: true,
          parallel: true,
          sourceMap: true,
          terserOptionns: {
            compress: {
              drop_console: true,
              duop_debugger: true
            }
          }
        }),
        new OptimizeCssAssetsPlugin() //css压缩优化
      }
    }
    plugins: [//数组,放着所有的webpack插件
      new MiniCssExtractPlugin({
        filename: '[name].css',
        chunkFilename: '[id].css'
      }),
        new HtmlWebpackPlugin(
            template:'./src/index.html',
            filename:'index.html',
            minify:{
                removeAttributeQutes:ture,//去除双引号
                collapseWhitespace:true,//压缩为一行
            },
            hash:true,在文件后面会加上?adsa4d58wa9da45dsa的哈希值
        )    
    ]
    

      

    5.打包多页应用

    6.配置source-map
    devtool:'source-map' //源码映射,会单独生成一个sourcemap文件 出错了会标识是,提示报错的行和列
    devtool:'eval-source-map' //不会单独生成一个sourcemap文件,但是可以显示行与列
    devtool:'cheap-source-map' //会单独生成一个sourcemap文件,不会产生列,产生 后你可以保留下来
    devtool:'cheap-module-eval-source-map' //不会单独生成一个sourcemap文件,集成在打包后的文件中,不会产生列

    7.watch监听的用法

    watch: true, //默认不开启
    watchOptions: { //监听的选项
      poll:1000, // 每秒 问我1000次
      aggregateTimeout:  500, // 防抖 我停止输入代码500毫秒后更新
      ignored: /node_modules/ // 不需要监听的
    }
    

      

    8.webpack的小插件y
    clean-webapck-plugin: 打包前删除旧的打包目录
    用法:new CleanWebpackPlugin('./dist')

    npm install clean-webpack-plugin -D
    const CleanWebpackPlugin = require('clean-webpack-plugin')
    new CleanWebpackPlugin({'./dist'})

    copy-webpack-plugin: 复制打包对象
    用法:

    npm install copy-webpack-plugin -D
    const CopyWebpackPlugin = require('copy-webpack-plugin')
    new CopyWebpackPlugin([
      {from: './doc', to: './'}
    ])
    

      

    BannerPlugin: // 版权著作
    用法:new webpack.BannerPlugin('copyirght')

    9.webpack跨域问题

    devServer: {
      //代理:
      proxy: {
        '/api': {
          target: 'http://127.0.0.1:3333',
          pathRewrite: {
            'api': ''
          }
        }
      }
      //模拟数据
      before(app){
        app.get('/user',(req,res)=>{
          res.json({name:'123'})
        })
      }
    }
    

      

    有服务端,不用代理来处理

    const express =require('express')
    const app = express()
    const wepack = require('webpack')
    
    //中间件
    const middle = require('webpack-dev-middleware')
    const compiler = webpack(config)
    
    app.use(middle(compiler))
    
    const config =require('./webpack.config.js')
    
    app.get('/user',(req,res)=>{
      res.json({name:'123'})
    })
    app.listen(3333)
    

      

    10.resolve属性的配置

    resolve: {第三方
      modules:[
        path.resolve('node_modules'), //指定地方查找
      ],
      extensions:['.js','.css','.vue'], //优化查找后缀名
      mainFields: ['style','main'], // 优先查找目录
      mainFiles: ['index.js'], // 优先查找目录
      alias: { //别名
        'vue': path.resolve(__dirname, './node_modules/vue/dist/vue.esm.js')
      }
    }
    

    11.第三方优化配置

    noParse: /jquery/, //不解析jquery中的依赖库
    plugins: [
      new webpack.IgnorePlugin(/./locale/, /moment/), // 引入moment包,但忽略locale文件夹
    ]
    

      

    12.动态连接库
    创建一个单独的webpack文件

    entry: {
      vue: ['vue'],
    }
    output: {
      filename: '_dll_[name].js',
      path: path.resolve(__dirname,'dist'),
      library: '_dll_[name]', // 命名
      libratyTarget: 'var' // 命名类型 commonjs|var|this
    }
    plugins: [
      new webpack.dllPlugin({
        name: '_dll_[name]',
        path: path.resolve(__dirname,'dist','manifest.json')
      })
    ]
    然后template.html引入_dll_vue.js
    在webpack.config.js加入
    plugins: [
      new webpack.dllReferencePlugin(
        manifest: path.resolve(__dirname, 'dist', 'manifest.json')
      )
    ]
    

      

    13.webpack多线程打包(happpack)

    const Happypack = require('happypack')
    module:{
      rules: [
        {
          test: /.css$/,
          use: 'Happypack/loader?id=css'
          }
      ]
    }
    plugins: [
      new Happypack({
        id: 'css',
        use: ['style-loader','css-loader']
      })
    ]
    

      

    14.懒加载,热更新(@babel/plugin-syntax-dynamic-import)

    懒加载:@babel/plugin-syntax-dynamic-import
    热更新:devServer:{hot: true}
    new webpack.NamedModulesPlugin()
    new webpack.HotdModuleReplacementPlugin()

  • 相关阅读:
    Java中的I/O 线程 网络
    20169214 2016-2017-2 《网络攻防实践》第六周学习总结
    20169214 2016-2017-2 《网络攻防实践》第五周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第五周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第四周学习总结
    20169214 2016-2017-2 《网络攻防实践》第四周学习总结
    20169214 2016-2017-2 《网络攻防实践》第三周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第三周学习总结
    20169214 2016-2017-2《网络攻防实践》第二周学习总结
    Android开发设计 实验报告
  • 原文地址:https://www.cnblogs.com/baidei/p/13658220.html
Copyright © 2020-2023  润新知