• webpack学习(二)


    一、多页应用的配置

    const path = require("path");
    const HtmlWpackPlugin = require('html-webpack-plugin')
    
    const htmlPluginHome = new HtmlWpackPlugin({
      template: './src/index.html',
      //多个 html    
      filename: 'home.html',
      //chunks代码块  放置引入的东西,代表当前要打包的是哪个文件
      chunks: ['home']
    })
    const htmlPluginOther = new HtmlWpackPlugin({
      template: './src/index.html',
      //多个 html
      filename: 'other.html',
      //chunks代码块  放置引入的东西,代表当前要打包的是哪个文件
      chunks: ['other']
    })
    
    entry: {
        //首页
        home: './src/index.js',
        //other页相关
        other: './src/other.js',
      },
      //两个出口
      output:{
        // name代表 home或者other  .[hash] 给文件加一个hash串
        // filename: '[name].[hash].js',
        filename: '[name].js',
        path: path.resolve(__dirname,'dist')
      },
    
    plugins: [
        // 打包多页面 需要new多次
        htmlPluginHome,
        htmlPluginOther,
      ]

     二、sourcemap源码映射

    当我们打包后的文件运行出错的时候很难找到错误,这个时候就可以用sourcemap来解决这个问题了

     //  1.源码映射 单独生成一个 source-map文件 出错会标识出错的列和行 大和全
      devtool:'source-map',
    
      //  2.不会单独生成一个文件 但会显示行和列
      devtool: 'eval-source-map',
    
      //  3.不会产生单独列 但会生成一个映射文件
      devtool: 'cheap-module-source-map', //保留 后来调试用
      //  4.不会单独生成文件 集成在打包文件中 也不产生列
      devtool: 'cheap-module-eval-source-map',

    这样就可以很方便的调试我们的代码

    三、watch监控实时打包

    我们希望修改完的代码能自动打包,而不是我们执行那npm run build,这个时候watch就实时打包。

    //监控代码的变化 实时打包   类似node里边那个实时监控的
      watch: true,
      //监控的选项
      watchOptions: {
        poll: 1000, //每秒问1000次
        aggregateTimeout: 500 ,//防抖 (类似于函数防抖)
        ignored: /node_modules/ //忽略哪个文件 不需要监控
      }, 

     四、实用小插件

    // bannerPlugin 版权声明
    const bannerPlugin = new webpack.BannerPlugin('make by hanke ,i will become success!')
    // 这个是错误写法  正确写法 应该是解构赋值那样写 说明这个插件包含许多东西
    // const CleanWebpackPlugin = require('clean-webpack-plugin')
     const { CleanWebpackPlugin } = require('clean-webpack-plugin') //每次打包前都先删除之前的文件再进行打包
    
     //拷贝文件
     const copyPlugin = new copyWpackPlugin(
       //接受一个数组 可以多个文件
       [{from:'./doc',to:'./'}] //将./doc文件拷贝到打包后文件的根目录下
     )

    五、跨域问题

    //跨域问题的设置
      devServer:{
        //这是 服务器为 /api/user
        proxy : {
          '/api':'http://localhost:3500'
        },
        // /user的用法
        proxy: {
          // 重写的方式 把请求代理到express服务器上
          '/api': {
            target: 'http://localhost:3500',
            pathRewrite: {
              '/api':'/'
            }
          }  
        }, 
        //前端只想单纯模拟方法
        before(app){ //提供的方法 相当于钩子 
          //写这些代码就不存在跨域问题 
          app.get('/user',(req,res)=>{
            res.json({
              name: 'myname-before'
            })
          })
        } 
        //有服务端,但是不用代理来处理 在服务器端开启webpack 端口用服务端端口
      }

    https://blog.csdn.net/qq_39083004/article/details/80860675

    六、resolve配置

    //解析第三方模块 commen
      resolve: {
        //指定解析的模块 第三方包
        modules: [path.resolve('node_modules')],
        //或者用 mainFields  入口的字段 先找style 再找main
        // mainFiles: [],//入口文件的名字 默认找index.js
        mainFields: ['style','main'],
        //扩展名 可以省略 需配置 extensions  依次解析
        extensions: ['.js','.css','.json']
        //别名  如 vue的vue-runtime和那个@
        // alias: {
        //   bootstrap: 'bootstrap/dist/css/bootstrap.css'
        // }
      },

     七、配置环境变量

    webpack.DefinePlugin是webpack自带得一个插件,不需要下载安装
    // 判断开发环境还是生产环境的插件  DefinePlugin
    const definePlugin = new webpack.DefinePlugin({
        DEV: JSON.stringify('production'), //生产环境 上线了
        DEV: 'dev' //表示是开发环境
    })
    
    plugins: [
        // 内置插件 判断开发环境
        definePlugin
      ],

    index.js

    //根据环境来判断用哪个url
    let url
    if(DEV === 'dev'){ //表示是开发环境
      url = 'http://localhost:8000'
    }else { //线上环境
      url = 'http://www.project.com'
    }

    但是这样太乱了,我们可以把生产环境和开发环境分开来写

    新建两个文件:webpack.dev.js 和 webpack.prod.js 分别表示开发环境配置和生出环境配置

    //开发环境得配置
    //安装 webpack-merge 将基础配置和开发配置合并
    let {samrt} = require('webpack-merge')
    let base = require('./webpack.base.js') //我们自己写的基础配置
    const definePlugin = new webpack.DefinePlugin({
        DEV: 'dev' //表示是开发环境
    })
    module.exports = {
        mode: 'development',
        plugins: [ //一些插件
            definePlugin
        ],
        optimization: { //优化项
            minimizer:[
    
            ]
        }
    }
    //打包命令: npm run build --config webpack.dev.js
    //生产环境得配置
    //安装 webpack-merge 将基础配置和生产配置合并
    let {samrt} = require('webpack-merge')
    let base = require('./webpack.base.js') //我们自己写的基础配置
    const definePlugin = new webpack.DefinePlugin({
        DEV: JSON.stringify('production'), //生产环境 上线了
    })
    module.exports = {
        mode: 'production',
        plugins: [ //一些插件
    
        ],
        optimization: { 
            minimizer:[
    
            ]
        }
    }
    //打包命令: npm run build --config webpack.prod.js
    不积跬步无以至千里
  • 相关阅读:
    BUUCTF--Youngter-drive
    BUUCTF--CrackRTF
    FireShell CTF 2020 Re Simple Encryption
    2020 美国大学生数学建模论文翻译(week 2)
    仿射密码
    乘法逆元
    RC4加密与解密
    2020 BJDCTF Re encode
    2020美国大学生数学建模(MCM/ICM)A题数据及参考资料
    路由器, 美团笔试题, 差分
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12555484.html
Copyright © 2020-2023  润新知