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(),
]
如果有什么不对的地方,欢迎指正。
webpack 配置详解相关推荐
- webpack配置详解
1.使用模式: (1).CLI模式:也就是命令行用户界面.例如: webpack example1.1.js bundle1.1.js 如果我们直接执行webpack,不加任何参数(且当前目录不存在配 ...
- webpack配置详解一:mode模式
写在前面:该系列文章为本人笔记系列,仅用于学习交流! 一.准备一个基础的demo项目: 1.创建一个空文件夹A,以规范化命名: 2. 进入文件夹A创建一个src文件夹,用于存放源代码 3. 当前A文件 ...
- webpack手摸手学习系列之配置详解的 entry、output、module、resolve、devServer 和 optimization
一.webpack 配置详解之 entry 创建空文件夹,通过 npm init 命令初始化 package.json 文件,通过 npm install webpack webpack-cli -g ...
- vue-cli3.0配置详解
这次给大家带来vue-cli3.0配置详解,使用vue-cli3.0配置的注意事项有哪些,下面就是实战案例,一起来看一下. 新建项目 1 2 3 4 5 6 7 8 # 安装 npm install ...
- vue-cli3全面配置详解
vue-cli3全面配置详解 vue-cli3-config 创建项目 配置环境变量 通过在package.json里的scripts配置项中添加–mode xxx来选择不同环境 在项目根目录中新建. ...
- babel 用法及其 .babelrc 的配置详解,想做前端架构,拒绝一知半解...
Babel 官方介绍:将 ECMAScript 2015 及其版本以后的 javascript 代码转为旧版本浏览器或者是环境中向后兼容版本的 javascript 代码. 简而言之,就是把不兼容的 ...
- node.js卸载、安装、配置详解
node.js卸载.安装.配置详解 一. node.js卸载 二.下载安装 2.1 下载 2.2 安装 2.2.1 选择msi安装 2.2.2 选择zip安装 三.配置 3.1 环境变量配置 3.2 ...
- 【精】angular.json配置详解【angular12】
文章目录 说明 目录结构的理解 angular.json详解 说明 angular升级到6以后,我们通过脚手架创建的项目就由angular-cli.json变为了angular.json了.其中引入了 ...
- elasticsearch-.yml(中文配置详解)
此elasticsearch-.yml配置文件,是在$ES_HOME/config/下 elasticsearch-.yml(中文配置详解) # ======================== El ...
最新文章
- 凌晨三点,各类程序员都在干吗?
- 听完411头猪的哼哼,他们找到了理解“猪语”的算法 | Scientific Reports
- New ADODB.Connection ADOX.Catalog 提示user-defined type not defined
- java算法 第七届 蓝桥杯B组(题+答案) 3.凑算式
- Eclipse中各种文件【默认编码格式设置】,防止乱码等问题
- 记一个mysql分页查询优化试验
- Python 开发一个间谍小程序
- 二叉树前序、中序和后序遍历的非递归实现
- servlet的体系结构
- vector的去重操作
- 前端面试:你应该了解的JS算法相关的知识
- Java实训项目6:GUI学生信息管理系统 - 实现步骤 - 创建项目
- Digix联合创始人:在接下来的12个月中 比特币将被称为真正的价值存储
- .idata数据的解析
- 怎么颈椎和秃头都扯上我,程序员:我太难了…
- 安装jenkins环境之jdk8
- mysql怎么用迅雷下载_MySQL安装详细步骤(附迅雷下载链接)
- 前端怎么加粗字体_价值上百万美元又备受争议的微软雅黑正常大小+小字体
- cmd安装pip问题。
- openBravo数据库结构分析
热门文章
- 像Excel一样使用python进行数据分析(1)
- JS学习记录(BOM部分)
- 02数据结构与算法分析之---数据的两种结构
- ScrollView中使用ListView
- 浅述WinForm多线程编程与Control.Invoke的应用
- Python自然语言处理学习笔记(19):3.3 使用Unicode进行文字处理
- 系统架构师学习笔记_第十一章(上)_连载
- 一步一步SharePoint 2007之五:向网站中添加一个子网站
- php session_regenerate_id,什么时候以及为什么我应该使用session_regenerate_id()?
- mysql use mysql_1、设置mysql远程访问执行mysql 命令进入mysql 命令模式,执行如下SQL代码mysql use mysql; mysql GRANT ALL ON ...