【webpack4 系列之三】

基础

  • entry: 配置模块的入口

    • webpack寻找文件的时候会以context为基础,context默认的是执行webpack的路径,比如我们项目就是默认根目录,当然也可以采取命令行去配置,比如webpack --context

      
      module.exports={
      
          context: path.resolve(__dirnaame,'app')
      
      }
      
      

      我们现在看到的entry里的路径也是相对于这个context的路径的,这个选项会影响后续配置的文件的路径

    • entry可以配成三种方式string, array, object,比如我们现在是一个页面就是‘./src/index.js’,多个页面的入口就是['./src/firstpage.js','./src/secondpage.js']

      • chunk: webpack会为每个生成的chunk起名字,如果上面entry配了string/array,则只有一个chunk,如果配成object,那么chunk会有多个,每个的名字就是object里的key的名字:
    • 配置动态entry:

      这个就是如果你有多个页面,要做多个入口,可以写成动态的,比如同步的直接返回一个object,异步方式就返回一个promise

      
      //同步
      
      entry: ()=> {
      
          return {
      
              first: './src/firstpage',
      
              second: './src/sencordpage'
      
          }
      
      }
      
      //异步
      
      entry: ()=>{
      
          return new Promise((resolve)=>{
      
              resolve({
      
                  first:'./src/firstpage',
      
                  second:'./src/secondpage'
      
              })
      
          })
      
      }
      
      
  • output:配置如何输出最终需要的代码

    • filename:如果只有一个,就是字符串,比如我们的bundle.js,如果输出多个chunk,就用通配符[name].js,

      可以这样[id]-[name]-[hash]-[chunkhash].js,这几个都是他的内部变量,表示chunk的唯一标示,名称,唯一标示的hash,chunk内容的hash

    • chunkFilename:比如commonchunkplugin输出的文件名,内置变量和上面一致

    • path:打包文件的输出目录

    • publicpath:这个就是静态资源如果放cdn上,需要去配的,可以自己写个域名放上去看看效果就知道了

    • crossOriginLoading:输出的时候如果需要异步加载一些资源,这个就是配置这些资源的获取,一般是通过jsonp来做的,会往html里插一个<script>标签

    • libraryTarget & library:配置以什么方式导出库和导出库的名称

    • libraryExport: 如果上面导出方式是commons/commonjs2的时候,你可以在这里导出你想导出的字模块

  • module:配置处理模块的规则

    • rules配置模块的读取和解析规则,就是配置loader的时候,一般是一个数组,然后每一部分配置怎么处理一个类型的文件,每一部分包括三个方面

      • 匹配到需要处理的文件,包括test(支持数组), include, exclude

      • 使用特定的loader来处理这些匹配到的文件babel-loader, css-loader...loader如果有多个参数需要传入,可以使用object来传递,经常看到的是option:{xxxx}这样的

      • 执行loader的顺序可以调整到最开始或者最后执行,通过enforce来配置,设为pre/post

    • noParse: 这个就是用来让webpack忽略一些文件,比如jquery/chartjs,举个例子:

      
      noParse:|jquery/chartjs/
      
      // 或者是函数形式
      
      noParse: (content) =>{
      
      return /jquery/chartjs/.test(content)
      
      }
      
      
    • parser: 支持amd, commonjs,systemjs,es6,举个例子

      
      {
      
          moudle:{
      
              rules:{
      
                  test: /\.js$/,
      
                  use:['babel:loader'],
      
                  parser:[
      
                      amd: false,
      
                      commonjs: false,
      
                      system:false,
      
                      harmony:false,
      
                      requireInclude: false,//禁用require.include
      
                      requireEnsure: false,//禁用require.ensure
      
                      requireContext: false,//禁用require.context
      
                      browserify: false,
      
                      requireJs:false
      
                  ]
      
      
      
              }
      
          }
      
      }
      
      
  • resolve: webpack如何寻找模块所对应的文件

    • alias: 就是别名,比如你import的时候,它会替换成真正的位置

      
      resolve:{
      
          alias:{
      
              components:"./src/components"
      
          }
      
      }
      
      

      上面代码就会在你import xxx from "components/xxx"的时候帮你替换成“./src/components/xxx”

    • mainFields: 有的模块提供不同环境的代码,这个字段可以指定优先使用哪个版本

    • extentions: 让webpack在寻找文件的时候,找这样扩展名的文件,你导入文件的时候不指定后缀名的话,会去看这个选项的配置,然后去寻找

      
      // 先去找ts文件,然后js,然后json文件
      
      extentsions:['.ts','.js','.json']
      
      
    • modules: resolve.modules配置web pack去哪些目录寻找第三方模块,默认指定node_modules,一般我们应用会这样配

      
      modules:['./src/components','node_modules']
      
      

      这样配后,你以前可能需要import xxx from ../../../components/xxx 就可以直接import xxx from xxx;简洁了许多

    • enforeExtention: 如果配成true,那么你import 语句就必须加后缀名,否则会找不到

  • plugins:配置扩展插件

    • 我们项目里用到了一些,你也可以看到,其实引入都是大同小异,主要是要搞清楚这里面的具体的配置项
  • dev-server:配置dev-server

    • hot: 我们在配置hot module replacement的时候会配的

    • inline: 一般使用这个模式,打开之后,webpack通过代理客户端控制模块替换和刷新,如果关闭,那它文件变化后,会通过iframe的方式去运行,要到localhost:8080/webpack-dev-server看效果

    • 还有一些配置项,参考文档,比如historyApiFallback, contentBase ,headers ,host, port, allowHosts ,disableHostCheck, https,clientLogLevel,compress,open这些都可以去看看,经常涉及到

  • others:其他配置项,配置文件不止可以返回object,也可以返回其他形式

    • target: 针对不同的环境,比如web, node,async-node,webworker,electron-main,electron-renderer

    • Devtool: 配置webpack如何生成sourcemap

    • watch: 配置文件更新监听

    • external:有些第三方库,这些不需要webpack打包,比如jquery

    • ResolveLoader: 告诉webpack如何发现loader

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,691评论 7 110
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,116评论 0 21
  • 第一部分:概念 概念 webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bu...
    吴佳浩阅读 3,080评论 0 2
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,734评论 0 1
  • 熟悉 webpack 与 webpack4 配置。 webpack4 相对于 3 的最主要的区别是所谓的零配置,但...
    yichen_china阅读 1,405评论 0 3