最近在学习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 配置详解相关推荐

  1. webpack配置详解

    1.使用模式: (1).CLI模式:也就是命令行用户界面.例如: webpack example1.1.js bundle1.1.js 如果我们直接执行webpack,不加任何参数(且当前目录不存在配 ...

  2. webpack配置详解一:mode模式

    写在前面:该系列文章为本人笔记系列,仅用于学习交流! 一.准备一个基础的demo项目: 1.创建一个空文件夹A,以规范化命名: 2. 进入文件夹A创建一个src文件夹,用于存放源代码 3. 当前A文件 ...

  3. webpack手摸手学习系列之配置详解的 entry、output、module、resolve、devServer 和 optimization

    一.webpack 配置详解之 entry 创建空文件夹,通过 npm init 命令初始化 package.json 文件,通过 npm install webpack webpack-cli -g ...

  4. vue-cli3.0配置详解

    这次给大家带来vue-cli3.0配置详解,使用vue-cli3.0配置的注意事项有哪些,下面就是实战案例,一起来看一下. 新建项目 1 2 3 4 5 6 7 8 # 安装 npm install ...

  5. vue-cli3全面配置详解

    vue-cli3全面配置详解 vue-cli3-config 创建项目 配置环境变量 通过在package.json里的scripts配置项中添加–mode xxx来选择不同环境 在项目根目录中新建. ...

  6. babel 用法及其 .babelrc 的配置详解,想做前端架构,拒绝一知半解...

    Babel 官方介绍:将 ECMAScript 2015 及其版本以后的 javascript 代码转为旧版本浏览器或者是环境中向后兼容版本的  javascript 代码. 简而言之,就是把不兼容的 ...

  7. node.js卸载、安装、配置详解

    node.js卸载.安装.配置详解 一. node.js卸载 二.下载安装 2.1 下载 2.2 安装 2.2.1 选择msi安装 2.2.2 选择zip安装 三.配置 3.1 环境变量配置 3.2 ...

  8. 【精】angular.json配置详解【angular12】

    文章目录 说明 目录结构的理解 angular.json详解 说明 angular升级到6以后,我们通过脚手架创建的项目就由angular-cli.json变为了angular.json了.其中引入了 ...

  9. elasticsearch-.yml(中文配置详解)

    此elasticsearch-.yml配置文件,是在$ES_HOME/config/下 elasticsearch-.yml(中文配置详解) # ======================== El ...

最新文章

  1. 凌晨三点,各类程序员都在干吗?
  2. 听完411头猪的哼哼,他们找到了理解“猪语”的算法 | Scientific Reports
  3. New ADODB.Connection ADOX.Catalog 提示user-defined type not defined
  4. java算法 第七届 蓝桥杯B组(题+答案) 3.凑算式
  5. Eclipse中各种文件【默认编码格式设置】,防止乱码等问题
  6. 记一个mysql分页查询优化试验
  7. Python 开发一个间谍小程序
  8. 二叉树前序、中序和后序遍历的非递归实现
  9. servlet的体系结构
  10. vector的去重操作
  11. 前端面试:你应该了解的JS算法相关的知识
  12. Java实训项目6:GUI学生信息管理系统 - 实现步骤 - 创建项目
  13. Digix联合创始人:在接下来的12个月中 比特币将被称为真正的价值存储
  14. .idata数据的解析
  15. 怎么颈椎和秃头都扯上我,程序员:我太难了…
  16. 安装jenkins环境之jdk8
  17. mysql怎么用迅雷下载_MySQL安装详细步骤(附迅雷下载链接)
  18. 前端怎么加粗字体_价值上百万美元又备受争议的微软雅黑正常大小+小字体
  19. cmd安装pip问题。
  20. openBravo数据库结构分析

热门文章

  1. 像Excel一样使用python进行数据分析(1)
  2. JS学习记录(BOM部分)
  3. 02数据结构与算法分析之---数据的两种结构
  4. ScrollView中使用ListView
  5. 浅述WinForm多线程编程与Control.Invoke的应用
  6. Python自然语言处理学习笔记(19):3.3 使用Unicode进行文字处理
  7. 系统架构师学习笔记_第十一章(上)_连载
  8. 一步一步SharePoint 2007之五:向网站中添加一个子网站
  9. php session_regenerate_id,什么时候以及为什么我应该使用session_regenerate_id()?
  10. mysql use mysql_1、设置mysql远程访问执行mysql 命令进入mysql 命令模式,执行如下SQL代码mysql use mysql; mysql GRANT ALL ON ...