看这篇文章的学习总结。
思维导图
webpack工作流程:

1. 配置entry,output.

output的配置要注意pubilcPath这个属性,这个属性指明在浏览器中如何加载生成的打包文件。这个属性在加载额外的代码块(使用代码分隔),加载图片(通过require)等静态资源的时候特别有用。

官方文档:The publicPath specifies the public URL address of the output files when referenced in a browser.

StackOverflow:When executed in the browser, webpack needs to know where you'll host the generated bundle. Thus it is able to request additional chunks (when using code splitting) or referenced files loaded via the file-loader or url-loader respectively.
For example: If you configure your http server to host the generated bundle under /assets/ you should write: publicPath: "/assets/"

    entry: './src',output: {path: 'builds',filename: 'bundle.js',publicPath: 'builds/'},

2. 配置loader:

  • 针对html:html-loader将html作为字符串导出,请求静态资源。

  • 针对CSS:

    • style-loader将样式以<style>的形式插入html

    • css-loader解析样式文件中的依赖关系并返回css代码;

    • sass-loader解析sass.

  • 针对JS:babel等,将ES6 => ES5.

  • 针对图片:

    • file-loader将文件产出到output并且返回相对url。

    • url-loader与前一个作用类似,当文件大小小于limit时返回Data Url。

    一般来说,style!css链式使用,file-loaderurl-loader就同时使用。当文件比较小时,就通过url内联。

module:{loaders: [{test: /\.html$/,loader: 'html'},{test: /\.js$/,      //匹配项loader: 'babel',include: __dirname + '/src', //必须匹配的位置,相反exclude属性为不匹配该项query:{presets: 'es2015'}},{test: /\.scss$/,loader: 'style!css!sass' //也可以写作loaders:['style','css','sass']}]}

3. 代码分割:

- 使用CommonJS:`require.ensure(dependencies, callback)`;- 使用ES6:
    //ES6:require.ensure([], function(require) {let contacts = require('./contacts')})   
//按需加载:当页面中有a元素时,才加载Button。可在Chrome devtool network中查看
if (document.querySelectorAll('a').length) {require.ensure([], () => {const Button = require('./Components/Button').defaultconst button = new Button('google.com')button.render('a')})}

4. 配置插件:

- 分割代码时提取公共部分:CommonsChunkPlugin配置`output.chunkFilename:'[name]-[chunkhash].js'`- 提取CSS生成独立的.css文件:extract-text-webpack-plugin注意:1)默认只提取最初的chunk,要提取所有的需要使用allChunks:true2)webpack版本1和版本2的配置不一样
    const webpack = require('webpack')const ExtractTextPlugin = require('extract-text-webpack-plugin')new webpack.optimize.CommonsChunkPlugin({name: 'main', //将依赖转移到主文件中children: true, //在所有子文件中寻找以来minChunks: 2 //一个依赖出现多少次会被抽取}),new ExtractTextPlugin('bundle.css',{allChunks:true //所有chunk中的也提取出来}) //将css生成到styles.css中{test: /\.scss$/,loader: ExtractTextPlugin.extract('style','css!sass'),// loader: 'style!css!sass' //也可以写作loaders:['style','css','sass']}

- 生产环境需要的插件:
    // This plugin looks for similar chunks and files// and merges them for better caching by the usernew webpack.optimize.DedupePlugin(),// This plugins optimizes chunks and modules by// how much they are used in your appnew webpack.optimize.OccurenceOrderPlugin(),// This plugin prevents Webpack from creating chunks// that would be too small to be worth loading separatelynew webpack.optimize.MinChunkSizePlugin({minChunkSize: 51200, // ~50kb}),// This plugin minifies all the Javascript code of the final bundlenew webpack.optimize.UglifyJsPlugin({mangle:   true,compress: {warnings: false, // Suppress uglification warnings},}),

5. 运行:

- 查看隐藏模块:`--display-modules`
- 查看模块和Chunks的对应关系: `--display-chunks`
- `webpack-dev-server --inline --hot`:第一个命令告诉Webpack在页面中包含HMR逻辑(代替在iframe中显示页面),第二个打开HMR。
devServer: {hot: true
}

6. 依赖关系的分析:webpack --profile --json > stats.json

以json格式生成profile输出到stats.json文件中。在这里和这里查看。

7. 错误集锦:

  1. 安装sass-loader node-sass后运行webpack报错:

ERROR in dlopen(/Users/yawenina/Desktop/Codes/webpack-starter/node_modules/node-sass/vendor/darwin-x64-47/binding.node, 1): no suitable image found.  Did find:/Users/yawenina/Desktop/Codes/webpack-starter/node_modules/node-sass/vendor/darwin-x64-47/binding.node: truncated mach-o error: segment __TEXT extends to 1212416 which is past end of file 713264@ ./src/component/Button.scss 4:14-123

解决方案:运行npm rebuild node-sass

webpack学习笔记相关推荐

  1. webpack学习笔记1

    webpack学习笔记1:基本概念 前言: 现在在日常的开发中,webpack已经是必不可少的东西了,现在的需求基本都是用webpack对资源进行打包整合,所以打算写一点关于webpack的东西,这是 ...

  2. webpack学习笔记(三):监听文件变化并编译

    在上一篇webpack学习笔记中主要认识了webpack配置文件中相关的基础配置和命令的执行.这次学习如何在文件发生变化时自动打包编译. 首先,我们来看一下配置文件 const path = requ ...

  3. webpack学习笔记(二):认识配置和命令执行

    在上一篇webpack学习笔记中,直接在命令行中使用npx webpack对项目进行打包时所使用的配置都是默认的,入口文件默认是src目录下的index.js文件,输出文件默认是dist文件夹下的ma ...

  4. webpack学习笔记(一):认识webpack

    初识webpack 根据官网介绍, webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具.当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图 ...

  5. webpack学习笔记(六):图片打包处理

    本片文章将记录webpack中如何处理图片的打包问题.在介绍图片打包处理之前,先说明一下引入图片的三种方式: 使用背景图片:将一个包裹图片的元素的css中的background属性设置为图片路径 使用 ...

  6. 我的webpack学习笔记(二)

    前言 上一篇文章我们讲了多页面js的打包,本篇文章我们继续scss的打包. 多页面css单独打包 首先,我们css编写采用的是sass,所以我们先来安装sass-loader以及可以用到的依赖 $ n ...

  7. webpack学习笔记 (三) webpack-dev-server插件和HotModuleReplacementPlugin插件使用

    webpack-dev-server插件 webpack-dev-server是webpack官方提供的一个小型Express服务器.使用它可以为webpack打包生成的资源文件提供web服务. we ...

  8. webpack学习笔记--安装

    1 首先要安装node  Node.js 自带了软件包管理器 npm,Webpack 需要 Node.js v0.6 以上支持 2 npm install webpack -g 通常我们会将 Webp ...

  9. Webpack学习笔记(官网教程)

    参考资料:webpack官方指南 GitHub源码:https://github.com/GYQ-LQ/quinn-webpack-demo demo01 安装&起步 (GitHub) 安装 ...

最新文章

  1. Azure 中国四年扩容 12 倍还不够,微软放话:全球每年新建 50-100 数据中心!
  2. Android 判断屏幕方向一个大坑
  3. mac 将本地代码上传到github_教你使用mac上传本地iOS代码到github
  4. uwsgi+nginx部署django项目(有图原理的详细展示的)
  5. python中运行结果为false-python 两个一样的字符串用==结果为false问题的解决
  6. 视频上传、转码、切面、存储的思路
  7. HDU 3488 KM
  8. 谈谈Objective-C的警告 (转)
  9. android xml 多行注释,C#中的XML多行注释 - 我做错了什么?
  10. c语言运算符优先级结合,C语言运算符优先级和结合性
  11. pytorch nn.ReLU
  12. Qt QDataTime QString 两个类的使用
  13. css-盒子模型详解以及远视图的制作
  14. 腾讯云微搭x腾讯文档,企业协同研发更便捷
  15. vue+file-saver+xlsx 封装导出Excel表格方法
  16. 水溶性CdSe/ZnS量子点PL480nm--660nm(亲水配体包裹的核/壳型荧光纳米材料)
  17. WinMerge的使用(代码相同却提示有差异)。
  18. Mysql数据库delete删除后数据恢复成功案例报告
  19. html 5新增技术,HTML5新增元素,标签总结
  20. 怎么提高国外服务器速度?

热门文章

  1. 「AlphaGo 之父」David Silver最新演讲,传授强化学习的十大原则
  2. SAP WM LRFMD中Variant参数的影响初探
  3. 为什么深度学习是非参数的?
  4. 瞭望丨光子芯片能否让中国“换道超车”
  5. 科学史上那些盛极一时的“著名理论”是如何被攻破的?
  6. 2019-2020中国趋势报告,203页PPT解读16大机会
  7. 学界 | 量化深度强化学习算法的泛化能力
  8. 揭秘高盛区块链报告:区块链技术在五大领域从理论走向实践 | 附报告下载
  9. 好惨!程序员修电脑遇到了人生滑铁卢 | 每日趣闻
  10. Java 知识全面总结:并发编程+JVM+设计模式+常用框架+....