当前位置: 首页 > 编程日记 > 正文

优化webpack配置

happypack

happypack可以加快rebuild的速度

  • 在开发的时候,需要将babel-loader替换成happypack/loader
{test: /\.(js|jsx)$/,exclude: /(node_modules|vendor)/,loader: isDev ? 'happypack/loader' : 'babel-loader'
} 
  • 同时添加插件, 根据需要定义不同的babel配置,控制线程的数量
new HappyPack({loaders: [{path: 'babel-loader',query: getBabelrc({isDev})}],threads: 4
})

AutoDllPlugin

同样用来加快rebuild速度。它的原理和webpack提供的dll加速方案一样,将常用的不变的模块编译成一个文件,以后rebuild的时候不再编译,通通指向那个预编译好的文件。那是一套极其繁琐的方案,这个插件帮你简化了配置。

new AutoDllPlugin({inject: true, // will inject the DLL bundles to index.htmlfilename: '[name].[hash].js',entry: {vendor: ['react', 'react-dom']}
})

that's all.

ExtractTextPlugin

用来将你项目中的所有css提出来变成一个文件。在生产环境中可以减少请求,但是不要在开发环境中使用,这会减慢你的编译速度。

这个配置有点繁琐,大家之前去github上看吧

缓存你的vendor文件

一般我们使用的node_modules里的文件是不会变,所以我们经常会这么做,把所有来自node_modules的文件编译成一个vendor.js,然后再加载我们的main.js。那我们怎么去让浏览器缓存我们的vendor.js呢,要做几件事

  • [name].[hash].js改成[name].[chunkhash].js,这是为了给每个文件各自不同的hash,不然每次build,所有的文件hash会一样。

我们每次build的时候,hash都会变,这是因为webpack运行的时候需要一段runtime的代码,这段代码一直在变,导致每次build都会产生不同的hash,而[name].[hash].js会将该hash用于所有的文件。

  • 将这段runtime的代码抽离出来,一般这段代码会加在第一个被加载的js文件里,这就导致这个js文件的hash一直在变。
  • 最后,我们会得到3个文件 runtime.js vendor.js main.js,依次插入html中,并且这个vendor.js自己的hash是不会随着build而改变的。这个时候,我们就可以使用manifest文件来缓存了。

webpack官网有教程,大家之前去上面看吧

NamedModulesPlugin

webpack为了减小文件大小,会对模块重命名。在你运行build完的js,有什么错误信息打印出来的时候,你完全看不懂这是个什么模块,这个时候你就需要这个插件,但是也不要在生产环境中用,会增加你的文件大小。

new webpack.NamedModulesPlugin()

that's all.

build出按文件类型分类的文件夹

对与我这种强迫症,我希望我build出来的东西都是正确归类,整齐摆放的,所以我希望我的js统统在js文件夹,css统统在css文件夹

  • 首先是css
new ExtractTextPlugin({filename: getPath => getPath('css/[name].[contenthash].css').replace('css/js', 'css'),allChunks: true
})

本来filename填css/[name].[contenthash].css应该就足够了,但是它会把你放在css/js文件夹下,所以在issue下,找到了这种方法来把css/js替换成css

  • 其余的很简单,在我们给我们的module取名的时候,取成js/xx就行,例如
new webpack.optimize.CommonsChunkPlugin({name: 'js/vendor',minChunks: function(module) {//去掉sassif(module.resource && (/^.*\.(css|scss|sass)$/).test(module.resource)) {return false;}//来自node_modules的文件统一打进vendorreturn module.context && module.context.indexOf("node_modules") !== -1;}
}),
new webpack.optimize.CommonsChunkPlugin({name: "js/runtime",minChunks: Infinity
})

记得压缩的时候丢掉console

new UglifyJSPlugin({sourceMap: true,compress: {warnings: false,  //buid 的时候不要报warningsdrop_console: true  //no console}
})

不仅仅是为了减少代码量,在生产环境运行时,让用户看到你一堆debug信息,实在不雅观。

相关文章:

Java多线程学习处理高并发问题

在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将…

防止表单多次提交

防止表单多次提交 //jQuery①<script type"text/javascript"> $("input:submit").each(function() { var srcclick $(this).attr("onclick"); if(typeof(srcclick)"function"){ $(this).click(function() { if (srcclick()) { …

Visual Studio环境变量使用实例:使用环境变量来组织project

前言 在前一篇文章Visual Studio中的环境变量(以Visual Studio 2013为例)中介绍了VS中的环境变量&#xff0c;本文将以实际样例说明怎样合理使用这些环境变量来组织VCproject。使用vs环境变量来组织project 通常一个解决方式包括多个项目。这些项目相互之间可能存在依赖关系。以…

股市币市:数据分析与交易所最新公告(20190301)

沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源&#xff1a; https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源&#xff1a; https…

Python常用6个技术网站汇总分享!

Python是一门面向对象的编程语言&#xff0c;它具有丰富和强大的库&#xff0c;能够把用其他语言编写的各种模块轻松地联结在一起&#xff0c;因此也常被称为“胶水语言”。Python技术会随着互联网的不断发展一直迭代和更新&#xff0c;所以需要Python开发的人员一直保持一个学…

devstack —— 单机部署 OpenStack 体验

2019独角兽企业重金招聘Python工程师标准>>> devstack 是一个用来快速部署 OpenStack 的脚本。 使用非常简单&#xff0c;执行 ./stack.sh 即可&#xff0c;但是在安装过程中遇到一些问题会中断&#xff0c;通过不断修正尝试&#xff0c;事后在这里记录一下&#xf…

使用ultraedit和cl编译器打造简易c/c++开发环境

在visual c下&#xff0c;每编写一个简单的小程序&#xff0c;就得生成一大串中间文件&#xff0c;另人十分的不爽。下面提供一个新的编写c/c程序的方法&#xff1a;   &#xff08;1&#xff09;&#xff0c;下载utraledit-32编辑器&#xff0c;推荐v11.  &#xff08;2&a…

股市币市:数据分析与交易所最新公告(20190302)

BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源&#xff1a; https://coinmarketcap.com/currencies/bitcoin/ 数字货币交易所公告 BigOne 2019/03/01 BigONE 用户体验月&#xff1a;有奖寻建议 &#xff0c;重金找 BUG …

分享五款java学习辅助工具,总有你用的上的~

想要学好java技术&#xff0c;除了自身的努力&#xff0c;辅助工具也不缺少&#xff0c;辅助工具可以帮助大家在今后的工作中可以提高工作效率&#xff0c;下面小编就来分享五款java学习辅助工具&#xff0c;总有你用的上的~ 五款java学习辅助工具&#xff1a; 1、Eclipse Ecli…

如何利用 C# 爬取「猫眼电影专业版:票房」数据!

在现代生活中&#xff0c;看电影已经成为大家的一种休闲方式。 前几天&#xff0c;我们介绍了 如何利用 C# 爬取「猫眼电影&#xff1a;热映口碑榜」及对应影片信息&#xff01;&#xff0c;通过这份“热映口碑”榜单&#xff0c;我们可以看到大家对当前热播电影的评价&#x…

MOSS的CSS样式说明,一个老外总结的

MOSS的CSS样式说明&#xff0c;一个老外总结的 http://www.heathersolomon.com/content/sp07cssreference.htm 转载于:https://www.cnblogs.com/greeny/archive/2010/09/03/1817027.html

什么是整型?Python整型详细介绍

整数类型(int)简称整型&#xff0c;它用于表示整数&#xff0c;例如&#xff0c;100、2016等。整型字面值的表示方式有四种&#xff0c;分别是十进制、二进制(以“0B”或“0b”开头)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。 Python的整型可以表示的范围是…

hibernate.hbm2ddl.auto的value

Hibernate 配置参数hibernate.hbm2ddl.auto Hibernate中的配置文件&#xff1a; <properties> <property name"hibernate.hbm2ddl.auto" value"create" /> </properties> 参数说明&#xff1a; validate 加载hibernate时…

linux的管道

1 管道的本质是进程间通信的一种手段 这个命名是非常形象的&#xff0c;数据从管道的一端流向管道的另外一端&#xff0c;然后另外一个进程等在那里&#xff0c;只要有数据了就进行处理。 2 管道连接的多个命令是同时启动的 也就是说&#xff0c;管道连接的多个命令的进程之间是…

股市币市:数据分析与交易所最新公告(20190303)

BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源&#xff1a; https://coinmarketcap.com/currencies/bitcoin/ 产品进程 赚钱是刚需&#xff0c;如何正确的交易股票&#xff1f;「股票数据分析软件」的开发&#xff08;上&…

零基础怎么学习web前端开发

零基础怎么学习web前端开发?web前端在移动互联网行业的运用是非常广泛的&#xff0c;而且web前端开发技术所涵盖的知识有很多&#xff0c;具体要怎么学习&#xff0c;来看看小编下面的详细介绍吧。 零基础怎么学习web前端开发?对零基础学员来说&#xff0c; web前端要学习的知…

【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)

DocFX 入门 1. DocFX 是什么&#xff1f; DocFX 是一个基于.NET的API文档生成器&#xff0c;当前支持 C# 和 VB。 它可以通过你的代码中的三斜杠注释生成 API 参考文档。同样也支持你使用 Markdown 文件创建一些其他的主题文档&#xff08;例如&#xff1a;教程以及使用手册&am…

在Ubuntu上安装Snort入侵检测系统。

转载于:https://www.cnblogs.com/onlyzq/archive/2010/09/10/1823079.html

一份来自山东院校的考研调剂系统已开放名单!

距离 19 考研初试成绩的公布已经有一段时间了&#xff0c;成绩不错的同学就安心准备复试吧&#xff0c;全力备考&#xff0c;一定要拿到属于你的录取通知书&#xff01;成绩不满意&#xff0c;擦线或者排名靠后的同学&#xff0c;复试、调剂两手准备&#xff0c;注定咱们要花更…

适合初学者学java技术的书籍推荐!

想要学会java技术&#xff0c;光靠听课是不够的&#xff0c;看书也是非常重要的一步&#xff0c;以下小编为大家推荐的是适合初学者学java技术的书籍&#xff0c;希望能够给初学者们带来帮助。 适合初学者学java技术的书籍推荐! 1. Java编程思想(第4版) 本书赢得了全球程序员的…

ref和out的区别

ref和out的区别在C# 中&#xff0c;既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值&#xff0c;并保持该更改。若要通过引用传递参数&#xff0c; 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效&#xff0c;其作用也很像C中…

如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!

前段时间我们介绍了如何利用 C# 语言来爬取“京东 - 计算机与互联网图书销量榜” 网页的方法&#xff0c;通过该方法&#xff0c;我们能够获得“京东”的图书销售排行榜数据。 可是&#xff0c;读书相当于给我们的大脑喂料&#xff0c;只有输入的是精华&#xff0c;才会有更好…

【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题

foreach语句使用总结增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. part3当然还是循环体. foreach语句是java5的新特征之一&#xff0c;在遍历数组、集合方面&…

参加软件测试培训需要学什么技术

软件测试这项技术在几年可谓是风头正盛&#xff0c;很多人都想要跳槽到这个行业&#xff0c;那么就需要学会软件测试技术&#xff0c;那么目前参加软件测试培训需要学什么技术呢?来看看下面的详细介绍吧。 参加软件测试培训需要学什么技术? 每个软件在上线之前都离不开重重测…

程序集和应用程序域

这两个概念是DotNet程序员经常见到的&#xff0c;但好多人搞不清它们。虽然MSDN对它们有相关的说明&#xff0c;但并不是那么容易看懂。在这里灰灰虫根据自己的理解用简单易懂的语言解绍一下它们。程序集(assembly) “程序集是包含编译好的、面向.NET Framework的代码的逻辑…

股市币市:数据分析与交易所最新公告

投资原则&#xff1a; 极端牛市是攒钱的时候&#xff08;分位数达到100&#xff09;&#xff0c;极端熊市是攒票的时候&#xff08;分位数低于40%&#xff09;&#xff0c;股指已经屡创新高&#xff0c;你再不攒钱就不对了&#xff0c;同理&#xff0c;股指屡创新低&#xff0c…

OpenGL学习(hello)

#include <gl/glut.h>void display(void){glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲以及深度缓冲glColor3f(1.0, 1.0, 1.0);glBegin(GL_POLYGON); // 绘画開始话多边形/*glVertex3f(0.25, 0.25, 0.0);glVertex3f(0.75, 0.25, 0.0);glVertex3f(0.75, 0.75, 0.0);glV…

选择python培训机构的关键考核五大因素,让你永不吃亏!

近几年&#xff0c;对于Python技术在人工智能领域的广泛使用&#xff0c;想要学习Python技术的人越来越多&#xff0c;市面上的Python培训机构也多了起来&#xff0c;如何选择适合的Python培训机构成了困扰大家的问题&#xff0c;下面小编就我大家详细的解析一下选择python培训…

Maven 的classifier的作用

直接看一个例子&#xff0c;maven中要引入json包&#xff0c;于是使用了 <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.2</version> </dependency> 可是&#xff0c;当…

NPOI 导出Excel

找到dll文件引用 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.IO;namespace NPOI.WriteExcel {class Program{/*NPOI.DLL&#xff1a;NPOI 核心函式庫。NPOI.DDF.DLL&#xff1a;NPOI 繪圖區讀寫函式庫。NPOI.HPSF.DLL&#xff1a;NPOI 文…