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…

小米品牌

对于现阶段的小米公司来说,他们的策略是行走在钢丝上的。为什么这么说呢?原因是营销策略的优势和劣势都很容易被人翻转。换句话来说就是优势的稳定性不够,劣势的方面又很容易崩盘,这两个方向的丝毫失误都会带给小米公司严重的打击…

wepy学习笔记之环境搭建

写了近两年小程序了,越来越发现原生小程序有太多鸡肋的地方。所以今天准备尝试一下wepy,正好最近手上有个外包,可以拿来练手。如果可以的话,或许会出一系列wepy相关的文章(偏实战),欢迎大佬们指…

山东青岛市南区:创建物联网 信息化管理涉案财物

近日,山东省青岛市市南区检察院自主设计研发“物联网”涉案财物管理系统,使涉案财物管理工作步入了信息化管理模式。 涉案财物管理工作是案件办理过程中一个相当重要的环节,而以往主要靠人工进行涉案财物管理,工作繁琐,业务量大,存在查找困难、堆放混乱等问题。库存现状不能及时…

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实战-日志监控平台》中给大家介绍一个日志监控平台的架构方案,接下来给大家分享如何去搭建部署这样一个平台,给大家做…

如何解决90%的报表设计难题?300张报表模板任君挑选

下载ActiveReport最新试用版 大数据时代,数据价值愈发彰显,数据分析正在成为影响业务决策的关键因素。其中,数据分析的结果以报表的形式呈现给用户,究竟什么样的报表设计才能真正让用户满意,如何保证用户在复杂的数据…

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操作系统。 …

luogu 1484\1792 种树 奇怪的贪心可反悔

1484 种树 此版本是线性的&#xff0c;那么根据链表维护即可&#xff1b; 构建新点&#xff0c;点的左右分别是原整个区间的前驱及后继&#xff0c;再正常维护即可 注意两个版本的维护有所不同 第二个版本的维护直接将左右两点删除 1792 种树2 此版本是环 1484 #include<bi…

第十四周作业

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

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、整体架构 整体架构目录&#xff1a;ASP.NET Core分布式项目实战-目录 一、介绍ELK 1、说明&#xff08;此篇ELK采用rpm的方式安装在服务器上&#xff09;-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp.net core 的数据。目前此篇文章只用到单台服务器&#xff0c;等下…

Rhel7 设置目录权限,acl权限

Rhel7 设置目录权限&#xff0c;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"的缩写(即&#xff1a;异步的JavaScript和XML)&#xff0c;是一种实现无页面刷新获取服务器数据的混合技术,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小时制&#xff0c;那么Amazon…

springMVC--XML解析

一 springMVC 入口 web.xml; DispatcherServlet二 初始化过程 1.寻找init(); 查看DispatcherServlet时候时&#xff0c;继承自servlet&#xff0c;肯定有初始化方法,DispatcherServlet继承自FrameworkServlet FrameworkServlet继承自HttpServletBean HttpServletBean继承自Http…

Vim 4 常用插件

Vim 系列教程目录: Vim 1 基本使用Vim 2 高级用法Vim 3 vimrcVim 4 常用插件Vim 5 其他编辑器的 Vim 插件Vim 插件网站 Vim 之所以强大, 有个很大的原因就是他有丰富的插件. 插件可以极大地增强 Vim 的功能. 那么去哪里下载插件呢? 插件怎么安装和管理呢, 听我慢慢道来. 先说到…

[Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02

在有些情况下需要得到函数调用者的模块名字。比如你想限制你的某个函数只能被自己某个特定的DLL调用。 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常。API函数_ReturnAddress 和GetModuleHandleEx 函数可以帮助我们达到这个目的。以下代码演示它们的用法&#xff1a;v…

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

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