webpack 配置详解

最近在学习webpack,边学边练习,下面是对一些应用到的属性、插件记录分享出来,也方便以后查找与复习,过程中碰到了一些坑,在注释中有说明:

const path = require('path')
const webpack = require("webpack")const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');function parseUrl(dir) {let mark = '\\'.indexOf(dir) !== -1 ? '\\' : '\/';return dir.split(mark).slice(0, -1).join(mark);
}
/*** 说明* * 1、可以通过import(\/* webpackChunkName: "lodash_file" *\/ 'lodash').then()这种方式动态添加Chunk,*      打包以后会独立成一个文件,注释部分结合output- chunkFilename 命名打包后的文件名* 2、chunk名称,可以通过entry进行定义,也有一些默认的chunk包*/
module.exports = {entry: {  // 命名chunk,后面可以通过属性名调用到app: './app/index.js',check: './src/check.js',repeat: './src/repeat.js',vender: ['colors','lodash']},};

output

output: {// 文件用hash打包的时候([name].[chunkhash].js),需要关闭热替换,生产环境是不需要热替换的// filename: '[name].bundle.js',filename: '[name].[chunkhash].js',path: path.resolve(parseUrl(__dirname), 'dist'),publicPath: '/',  // webpack-dev-middleware插件用到的公共路径,在server.js文件中会用到chunkFilename: '[name].bundle.js',  // 可以控制动态加载文件名称
},

devtool

/*** devtool * * 追踪错误和警告,打包以后,使用打包文件也可以追踪到哪个文件出错,可以有多个选项,* 参见:https://segmentfault.com/a/1190000004280859 或 https://doc.webpack-china.org/configuration/devtool (官网)* * 开发环境推荐使用 cheap-module-eval-source-map* 理由:* 1、不生成列信息,可以大幅提高 souremap 生成的效率,如果需要列信息,有些浏览器也可以自动生成列信息* 2、使用 eval 方式可大幅提高持续构建效率,参见 https://doc.webpack-china.org/configuration/devtool 效率对照表* * 生产环境使用 source-map*/
devtool: 'cheap-module-eval-source-map',

watch

// 监听项目是否有改动,如果有改动直接影响修改
watch: true,
watchOptions: {// 重新构建一次的延迟时间,在这段时间内有其他变动,会收集起来一起构建aggregateTimeout: 300,poll: 1000,  // 每秒检查一次变动ignored: /node_modules/  // 忽略node_modules文件夹中的文件变动,提升性能
},

devserver

//  构建一个web服务器
devServer: {contentBase: '../dist',  // 指定服务响应目录hot: true,  // 启用热替换模块 需要在入口文件中进行配置监听,详细参考文档https://doc.webpack-china.org/guides/hot-module-replacement/
},

module

module: {// 解析文件时匹配相对应的loaderrules: [{test: /\.css$/,use: ["style-loader", "css-loader"],use: ExtractTextPlugin.extract({  // 样式独立打包use: 'css-loader'})},{test: /\.(png|svg|jpg|gif)$/,use: ['file-loader']}]
},

plugins

plugins: [// 分离css依赖,生成独立样式包,放入参数文件中(没有会自动生成)new ExtractTextPlugin('styles.css'),// 生成html模板,调用了webpack生成的所有包new HtmlWebpackPlugin({title: 'Output Management',filename: 'index.html',// chunksSortMode: 'none',  // 模块排列顺序// chunks: ['app'],  // 渲染模板,输入入口定义的模板名称excludeChunks: ['check'], // 排除的渲染模板,以输入入口定义的模板名称为准template: 'index.html'  // 模板路径,在现有模板的基础上将打包生成的chucks添加上去}),// 先清除文件夹后生成,避免不必要的文件存在,根目录下的不能清除new CleanWebpackPlugin(['../dist']),// prints more readable module names in the browser console on HMR updatesnew webpack.NamedModulesPlugin(),/*** 热替换* * 需要在devServer属性配置 hot:true 并且创建组件 启动热替换* 通过 module.hot 属性,用来接收监听接口 放到入口文件中* 使用热替换可以实现局部刷新,节省开发时间* 如果没有引入热替换,修改后就会全部刷新,影响响应速度* HMR 修改样式表时,需要在hot下引入接口,* 注意:使用热替换监听样式修改时,不能启动样式表独立打包模式,如果启动浏览器就不能响应到样式的修改* API链接:https://doc.webpack-china.org/api/hot-module-replacement*/new webpack.HotModuleReplacementPlugin(),// 代码压缩,可以配置source map模式// new UglifyJSPlugin({//     // 使用source map模式(devtool属性必须设置为devtool: 'source-map')//     // 作用:在生产环境中也可以很方便的调试代码,类似于devtool: 'inline-source-map'模式//     sourceMap: true// }),new webpack.DefinePlugin({// 定义环境变量,可以在打包入口文件中获取到,相应环境变量'process.env': {'NODE_ENV': JSON.stringify('production')}}),// 将公共的依赖模块提取到已有的入口 chunk 中 // 可以创建多个// 可以提取自带 chunk 独立打包,比如:boilerplate 、 manifest ....new webpack.optimize.CommonsChunkPlugin({name: 'common', // chunk 的名称filename: 'common_file.js',  // 输出 chunk 文件名/*** 公共 chunk 之前所需要包含的最少数量的 chunks(也就是有几个chunk依赖)* * 1、可选择 number|Infinity(马上生成 公共chunk,但里面没有模块)|function(module, count) -> boolean,* 2、可以调用函数 返回true的文件打包成独立文件,false 不会独立成包* * @param module 模块信息* @param count 调用数量*/minChunks: function (module, count) {// 禁止打包样式相关文件(有组件针对样式文件打包)if (module.resource && (/^.*\.(css|scss)$/).test(module.resource)) {return false;}// node_modules文件夹中的文件独立打包return module.context && module.context.indexOf("node_modules") !== -1;}}),// 可以根据 entry 或name名称进行分离打包,// 如果和 chunk = 'common' 共用,会报错new webpack.optimize.CommonsChunkPlugin({name: "vender",minChunks: Infinity}),// 避免hash发生变化// new webpack.HashedModuleIdsPlugin(),
]

如果有什么不对的地方,欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连续对焦 auto对焦_如何在Windows 10上使用对焦辅助(请勿打扰模式)

连续对焦 auto对焦Windows 10’s “Focus Assist” feature is a “Do Not Disturb” mode that hides notifications. Windows automatically activates it when you’re playing PC games or mirroring your display—and you can have Windows automatically activate it on…

spotify能免费下歌吗_Spotify免费版与高级版:值得升级吗?

spotify能免费下歌吗Spotify offers two tiers: a free, ad-supported plan and a $9.99 per month Premium plan. But what are the differences between the two and is it worth upgrading? Let’s find out. Spotify提供两个等级:免费的广告支持计划和每月9.99…

BZOJ4012 [HNOI2015]开店

BZOJ4012 [HNOI2015]开店 这道题因为太多人拿这个题卡$BZOJ$,于是成了权限题。。。 本蒟蒻表示没钱氪金。。。 无奈,拿出了洛谷:P3241 [HNOI2015]开店 还有$LOJ$:#2116. 「HNOI2015」开店 这里附上洛谷的题面: 题目描述…

ElasticSearch实战-入门

1.概述 今天接着《ElasticSearch实战-日志监控平台》一文来给大家分享后续的学习,在《ElasticSearch实战-日志监控平台》中给大家介绍一个日志监控平台的架构方案,接下来给大家分享如何去搭建部署这样一个平台,给大家做…

macos 版本_如何检查您使用的macOS版本

macos 版本Apple releases new versions of the macOS operating system about once per year. Here’s how to check which release of the macOS operating system is installed on your MacBook, iMac, Mac Mini, or Mac Pro. 苹果大约每年发布一次新版本的macOS操作系统。 …

第十四周作业

2019春第二次课程设计实验报告 一.实验项目 贪吃蛇游戏 二.实验功能描述: 存储数据,实现wasd控制蛇方向,吃到食物就增加长度,最后按长度算分数,撞到障碍物则死亡,计算积分 三.项目模板结构介绍:…

java语言不用担心内存吗_不用担心智能手机的电池,只需使用它

java语言不用担心内存吗When you’re trying to get the most life out of your device, it’s easy to overthink batteries. Don’t. Plug in your devices when possible, carry a battery pack with you, and get on with your life. 当您试图充分利用设备的使用寿命时&…

asp.net core结合NLog搭建ELK实时日志分析平台

0、整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一、介绍ELK 1、说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp.net core 的数据。目前此篇文章只用到单台服务器,等下…

Rhel7 设置目录权限,acl权限

Rhel7 设置目录权限,acl权限 改变用户和组的所属 Getfacl 取得 Setfacl设置 [rootdesktop0 tmp]# setfacl -m u:natasha:rw fstab [rootdesktop0 tmp]# setfacl -m u:harry:- fstab [rootdesktop0 tmp]# setfacl -m o::r fstab [rootdesktop0 tmp]# getfacl fstab #…

IT兄弟连 JavaWeb教程 AJAX定义以及解决的问题

2019独角兽企业重金招聘Python工程师标准>>> Ajax是"Asynchronous JavaScript And XML"的缩写(即:异步的JavaScript和XML),是一种实现无页面刷新获取服务器数据的混合技术,Ajax这个概念的最早提出者是Jesse James Garrett。我们知道…

echo和@echo_如何在Echo Show和Echo Spot上切换到24小时时钟

echo和echoIf you prefer the 24-hour clock format instead of the usual 12-hour format, Amazon recently (and quietly) added the ability to switch between the two on the Echo Show and Echo Spot. 如果您希望使用24小时制而不是通常的12小时制,那么Amazon…

生信入门-爱课程上的华中农业大学

1.生物大分子序列分析 2.主要技术 3.生物信息学的应用 4.应用2 转载于:https://www.cnblogs.com/BlueBlueSea/p/9610313.html

pc端文本_使用即将推出的Windows功能从PC发送文本

pc端文本Windows/Android/iPhone: Send and receive SMS messages on your PC, and access all the files on your phone without taking it out of your pocket. Windows / Android / iPhone:在PC上发送和接收SMS消息,并访问手机上的所有文件&#xff0…

非常详细的Exchange 功能路线图

非常详细的Exchange 功能路线图 此路线图可帮助您熟悉 Microsoft Exchange Server 2010 中的所有功能。第一部分列出了可通过 Exchange 管理控制台 (EMC) 或 Exchange 命令行管理程序管理的所有功能。该部分还说明如何在 EMC 中导航至功能,并提供指向相应管理主题的…

String类常用方法

定义方法类型描述public String(char[] value)构造直接将一个字符数组变为一个字符串public String(char[] value,int offset,int count)构造将一个指定范围的字符数组变为字符串public String(byte[] bytes)构造将一个byte数组全部变为字符串public String(byte[],bytes,int o…

python基础一 day6 文件操作

读写只会进行两步, r模式下写读 seek是按字节去找的 for line in f: for循环是一行一行的读取出来 strip默认去空格和换行符 空格、制表符、换行符、回车、换页垂直制表符和换行符称为 “空白字符” for in 一个不可变数据类型,比如字符串,先…

静态路由默认路由的配置

静态路由实验 负载均衡的一点是个人理解,有不正确之处欢迎批评指正。 R1配置: s0/0/0口:193.1.1.9/30(本地) next-hop 193.1.1.10/30 point-to-point link F0/0设置子接口:F0/0.1 172.17.115.1/24 VLAN1 F0/0.5 172.17.110…

r中汇率市场_如何在Word 2013表中汇总行和列

r中汇率市场If you’re working in Word and you need to total values in a table, you can do so without having to enter the data into Excel and then copy and paste it into Word. Word can do simple calculations such as summing, multiplying, and averaging. 如果…

敏捷开发

敏捷开发是1990年逐渐引起人们广泛关注的新型软件开发方式,它是具有应对快速变化需求的软件开发能力。相对于非敏捷开发,它是一种以客户需求为核心,持续迭代,循序渐进的开发方式,敏捷绝非是一种特定的开发方式,而是一种…

数据同步云端本地_如何从云端删除Windows 8的同步数据

数据同步云端本地The ability to sync data and settings between computers running Windows 8 is great, but it does mean that your information – possibly personal – is stored in the cloud. If you have changed your mind about syncing and want to remove your d…