webpack记录

1 entry

入口文件,可以有多个,对象的键值是对应页面文件的名字,

  • entry配置:

    entry: {
        //入口文件
        index: './app/spa/config/config.js',
        vendor: [
            'jquery'
        ]
    },
    

2 output

输出文件,即输入文件各模块的依赖在module和plugins等编译后的产出

  • 2.1 path:输出路径

  • 2.2 filename:输出文件名

  • 2.3 publicPath:资源文件路径(比如在项目中引入了额外的字体图标或者超出图片压缩模块压缩大小的本地图片,都需要编译到该资源文件下)

  • output配置:

    entry: {
        //输出文件
        path: path.join(__dirname, '/build'),
        publicPath: '',
        filename: 'bundle.js',
    },
    

3 module

模块

  • 3.1 loaders:加载器(webpack loader的执行顺序是从右到左)

    • test:正则匹配文件类型;

    • exclude:忽略的目录;

    • loader:使用的加载器;

  • 3.1.1 js加载器babel如需要将ES5代码编译为ES6需要引入babel-loader模块并在项目根目录下创建.babelrc文件

    • .babelrc文件:

      {
        "presets": [
          "es2015"
        ]
      }
      
    • loader配置:

      {
          test: /\.js$/,
          exclude: /node_modules/,
          loader: 'babel-loader'
      }
      
  • 3.1.2 css加载器过css-loader解析.css文件,通过style-loader将css代码的style标签中

    • loader配置:

      {
          test: /\.css$/,
          loader: "style-loader!css-loader"
          // 它在css-loader后面加了一个查询参数modules,表示打开 CSS Modules 功能。
          // loader: "style-loader!css-loader?modules" 
      }
      
    • CSS Modules阮一峰博客: http://www.ruanyifeng.com/blog/2016/06/css_modules.html

  • 3.1.3 字体矢量文件加载器通过url-loader模块加载,将小于limit(以bytes为单位)的大小的文件以base64压缩(将资源文件转为base64码会使体积变大,所以建议只针对小文件进行转码)

    • loader配置:

      {
          test: /\.(otf|eot|svg|ttf|woff|woff2).*$/,
          //将资源文件>1024byte的打包到output中publicPath所在目录fonts文件夹下
          loader: 'url-loader?limit=1024&name=fonts/[name].[ext]'
      }
      
  • 3.1.4 图片文件加载器通过url-loader模块加载,将小于limit(以bytes为单位)的大小的文件以base64压缩(将资源文件转为base64码会使体积变大,所以建议只针对小文件进行转码)

    • loader配置:

      {
          test: /\.(gif|jpe?g|png|ico)$/,
          //将资源文件>1024byte的打包到output中publicPath所在目录img文件夹下
          loader: 'url-loader?limit=1024&name=img/[name].[ext]'
      }
      

4 plugins

插件

  • 4.1 DefinePlugin:通过该插件配置的属性会成为一个全局属性(pro,dev)

    • 配置:

      new webpack.DefinePlugin({
          //在任何地方都可以访问到__DEV__()
          __DEV__: true
      }),
      
  • 4.2 UglifyJsPlugin:压缩js插件(pro)

    • 配置:

      new webpack.optimize.UglifyJsPlugin({
          compressor: {
              warnings: false
          },//压缩代码
          beautify:true,//美化代码
          mangle: {
              except: ['$', 'exports', 'require']
          }//通过设置except数组来防止指定变量被改变
      }),
      
  • 4.3 DedupePlugin:去除重复依赖插件webpack2后此插件无用忽略(pro)

    • 配置:

      new webpack.optimize.DedupePlugin()
      
  • 4.4 OccurrenceOrderPlugin: webapck 会给编译好的代码片段一个id用来区分,而这个插件会让webpack在id分配上优化并保持一致性。具体是的优化是:webpack就能够比对id的使用频率和分布来得出最短的id分配给使用频率高的模块(pro)

    • 配置:

      new webpack.optimize.OccurrenceOrderPlugin()
      
  • 4.5 CommonsChunkPlugin : 公共模块提取,就是把依赖库(比如react react-router, redux,jquery)打包到一起(pro)

    • 配置:

      //entry中的vendor
      //vendor: [
      //    'jquery',
      //    'react',
      //    'react-dom',
      //    'react-router'
      //]
      new webpack.optimize.CommonsChunkPlugin({
          //对应entry中的vendor
          name: "vendor",
          // (给 chunk 一个不同的名字)
          filename: "vendor.js",
      }),
      

以上是常用的webpack亲儿子插件

  • 4.6 HtmlWebpackPlugin:html插件(pro,dev)

    • 配置:

      new HtmlWebpackPlugin({
          // 输入html模板
          template: 'app/index.html',
          // 输出html
          filename: 'bundle.html',
          // js插入的位置,true/'head'  false/'body'
          inject: 'body',
          // 引入那几个js对应entry的key
          chunks: ['index'],
          //引入js后加上hash值防缓存
          hash: true,
          // html压缩部分
          minify: {
              //移除HTML中的注释
              removeComments: true,
              //删除空白符与换行符
              collapseWhitespace: true
          }
      }),
      
  • 4.7 BundleAnalyzerPlugin:wepback的可视化资源分析工具(dev)

    • 配置:

      $$npm install --save-dev webpack-bundle-analyzer
      
      const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
      
      module.exports = {
        plugins: [
          new BundleAnalyzerPlugin()
        ]
      }
      

5 devtool

开发工具,生成map文件方便调试

  • 配置:

    devtool: 'source-map'
    

6 resolve

解析。

  • 6.1 alias:别名(pro,dev)

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

推荐阅读更多精彩内容

  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,691评论 7 110
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,160评论 7 35
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,463评论 2 71
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,115评论 0 21
  • 漫长的光阴里,你不会只走过一个人的生命,也不会只有一个人走过你的生命。缘来时,猝不及防;缘去时,无力阻止。唯一能做...
    暮雪辰星阅读 163评论 0 0