1.使用alias简化路径

alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src')
}

2.overlay界面弹出编译错误

devServer: {
overlay: {
errors: true,
warnings: true
}
}

3.import语句指定chunkName

webpack2用import来代替require.ensure,其无法直接指定chunkName,可以使用注释的方式指定

import(/* webpackChunkName: "my-chunk-name" */ 'module');

4.Tree-shaking

只打包引用的方法,模块的为引用方法不被打包

什么是 tree shaking,即 webpack 在打包的过程中会将没用的代码进行清除(dead code)。一般 dead code 具有一下的特征:

1. 代码不会被执行,不可到达
2. 代码执行的结果不会被用到
3. 代码只会影响死变量(只写不读)

Tree shaking 生效必要条件

1. 模块引入要基于 ES6 模块机制,不能使用 commonjs 规范,因为 es6 模块的依赖关系是确定的,和运行时的状态无关,可以进行可靠的静态分析,然后清除没用的代码。而 commonjs 的依赖关系是要到运行时候才能确定下来的。

2. 开启 UglifyJsPlugin 这个插件对代码进行压缩

5.Scope Hoisting

webpack以前使用独立的函数包装一个个模块文件,webpack3可以将所有模块连接到一个闭包里面,放入一个函数,执行速度更快,体积也会更小

scope hoisting,顾名思义就是将模块的作用域提升,在 webpack 中不能将所有所有的模块直接放在同一个作用域下,有以下几个原因:

1. 按需加载的模块
2. 使用 commonjs 规范的模块
3. 被多 entry 共享的模块

想要webpack3开启Scope Hoisting,必须在 plugins 中添加 ModuleConcatenationPlugin

6.不用使用DllPlugin插件

7.内联少量的css,减少请求

plugins: [
new StyleExtHtmlWebpackPlugin({
minify: true
})
]

8.preload插件优化请求时间

plugins: [
new PreloadWebpackPlugin({
rel: 'preload',
as: 'script',
include: 'all'
})
]

9.UglifyJsPlugin配置优化

new UglifyJsPlugin({
// 最紧凑的输出
beautify: false,
// 删除所有的注释
comments: false,
compress: {
// 在UglifyJs删除没有用到的代码时不输出警告
warnings: false,
// 删除所有的 `console` 语句
// 还可以兼容ie浏览器
drop_console: true,
// 内嵌定义了但是只用到一次的变量
collapse_vars: true,
// 提取出出现多次但是没有定义成变量去引用的静态值
reduce_vars: true,
}
})

10.引用某个文件夹中的所有文件(webpack1有效,webpack2以上版本未知)

如果你希望达到如下的效果:

require('./behaviors/*') /* Doesn't work! */

你需要使用require.context:

//出处 http://stackoverflow.com/a/30652110/873870

function requireAll (r) { r.keys().forEach(r) }

requireAll(require.context('./behaviors/', true, /\.js$/))s

各种require引用用法,参考此文

参考:https://juejin.im/post/59b9d2336fb9a00a636a3158
         http://web.jobbole.com/93676/

最新文章

  1. 常用API——日期型函数Date
  2. HDU 3328 Flipper 栈 模拟
  3. Mongodb集群部署ReplicaSet+Sharding -摘自网络
  4. rcp(插件开发)The type XXX cannot be resolved. It is indirectly referenced from required .class files解决办法
  5. 多媒体应用-swift
  6. div+js 弹出层
  7. AngularJS学习笔记4
  8. 学习笔记:javascript 表单对象(form)
  9. 糖果大战 hdu1204
  10. [SDOI2015]序列统计
  11. transform 的副作用
  12. 使用以太网通信方式刷新AB PLC固件
  13. Zookeeper基本信息
  14. wordpress安装教程
  15. C#的app.Config文件中设置,可以选择执行环境(左配置,有程序),app.Config中的appSettings首字母必须小写,符合源码要求
  16. 如何判断java对象是否为String数组
  17. 2019.01.01洛谷 P4725/P4726 多项式对数/指数函数(牛顿迭代)
  18. 关于OBS获取显示器黑屏的解决办法
  19. Delphi应用程序的调试(十)调试器选项
  20. 使用Intel IPT技术保护您的帐号安全

热门文章

  1. 易语言调用C++写的DLL
  2. centos7部署harbor
  3. Eclipse搭建SpringBoot
  4. 宁夏邀请赛F FLOYD
  5. POJ 2836 状压DP
  6. Windows Server 2008 R2 可能会碰到任务计划无法自动运行的解决办法
  7. [Bzoj2246]迷宫探险(概率+DP)
  8. vue 组件间数据传递
  9. 大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)
  10. HDFS HA 的 core-site.xml