这是优妈成长记的第63篇原创

这是一个webpack配置说明

本文是发布在github上webpack-demo的README文件内容。主要对webpack.config.js每一条的注释说明。

github项目地址:https://github.com/hourong88/webpack-demo

可以点击文章最下方【阅读原文】跳转github链接查看,或下载实战代码直接食用。

Run the example

$ npm install$ npm start

Introduce

这个demo是简单的webpack配置demo,您可以根据实际项目需求,按照下方的配置说明,个性化的配置您的项目。

您也可以关注我,后续会发布最新的依赖的脚手架项目。

This demo is a simple webpack configuration demo, you can personalise your project according to your actual project requirements by following the configuration instructions below.

You can also follow me and I will be posting the latest scaffolding projects with dependencies.

webpack.config.js 配置说明 Configuration instructions

The following comments are in Chinese, you can use the software to translate them.

const path = require('path')

// module.exports = function (webpackEnv) {    module.exports = {    //定义生产环境和开发环境    //开发环境development 和生产环境 production构建目标差异很大    //开发环境:需要强大的,具有实时重新加载或热模块替换能力,source map 和 localhost server 调试能力    //生产环境: 我们关注更小的bundle,更轻量的source map,更优化的资源,改善加载时间。    //所以不同环境配置不同,有倾向性。    // const isEnvDevelopment = webpackEnv === 'development';    // const isEnvProduction = webpackEnv === 'production';    // const publicPath = isEnvProduction ? '/ui/' : isEnvDevelopment && '/';

    // return{        //entry表示入口,webpack构建第一步将从entry开始,输入类型可以抽象为字符串,数组和对象。从入口开始,递归搜寻及解析出所有入口依赖的模块。entry是必填的,否则会报错、退出        entry: './src/app.js', //可以有一个入口,也可以有多个入口,多个入口对应多个**chunk**,具体写法看中文文档。entry根据构建出来的依赖关系图,从而知道哪些部分将会输出为bundle。        //什么是chunk?        //webpack专用术语,用于管理webpack打包进程。chunk和输出的**bundle**一一对应,但是,有些是一对多的关系。        //如果entry配置的是对象object,可能就会出现多个thunk,这时候thunk名称是对象健值对中健的名称        //什么是bundle?        //bundle是已经加载完毕,和被编译后的源代码最终版本。由多个模块产生,一个应用可以拆分为多个bundle。Bundle Splitting是webpack优化代码的一种方法。        //总之,chunk和bundle都可以拆分,按需加载,减少代码量。        output: {            path: path.resolve(__dirname , 'dist'), //输出文件存放的路径            //filename: isEnvDevelopment ? 'bundle.js' : '[name].js',//输出文件完整名称,即使指定了多个入口点(entry points),output配置项也只能设置一个。            filename:'bundle.js',            publicPath: publicPath,//发布到线上,所有资源的URL前缀            pathInfo:true,//是否包含有用的文件路径信息到生成到代码里,为布尔类型。            chunkFilename:'[name].js',//chunk文件名称            sourceMapFilename:'[file].map',//生成到source map文件名称            devtoolModuleFilenameTemplate: 'webpack:lll[resource-path ]', //浏览器开发者工具显示的源码模块名称            },            //配置模块        module: {            rules:[                { //babel es6转es5 兼容 babel-loader 同步的                //配置模块的读取和解析规则,通常用来配置Loader。对模块源码进行转换                test: /\.(js|mjs|jsx|ts|tsx)$/,//正则匹配命中要使用loader的文件,通过test、 inc1ude、 exclude三个配置项来选中Loader要应用规则的文件。                include:[                    path.resolve(__dirname , 'src') //只会命中这里面的文件                ],                exclude: /node_modules/, //忽略这里面的文件                use: [//使用哪些loader,有先后次序,从后向前执行                    'style-loader', //直接使用loader名称 scss 文件的处理顺序为先 sass-loader,再 css-loader,再 style-loader                    {                        options: {                        //向html-loader传一些参数                        },                        loader: require.resolve('eslint-loader'),                        //常用loader 分别配置                        //转换编译:script-loader, babel-loader,ts-loader,coffee-loader                        //处理样式:style-loader,css-loader,less-loader,sass-loader,postcss-loader(postcss和scss关系类似babel和js)                        //处理文件:raw--loader,url-loader,file-loader                        //处理数据:csv-loader,xml-loader                        //处理模板语言:html-loader,pug-loader,jade-loader,markdown-loader                        //清理和测试:mocha-loader,eslint-loader                        //react:babel-preset-react                    },                ],                },              ],            noParse:[ //提高webpack构建性能,忽略没采用模块化的文件递归处理                //noParse文件不能包含模块化的语句import,require,defind,不然会导致构建文件无法在浏览器浏览                /lspecial-library\.js$1 //用正则匹配            ]        },        plugins:[            //配置插件,扩展webpack功能,plugin配置项接收一个数组,数组每一项都是使用一个plugin实例,plugin的参数通过构造函数传入。使用plungin,需要在社区找到plugin本身提供的配置项        ],        resolve: { //配置寻找模块的规则            modules: [ //寻找模块的根目录,为 array 类型,默认以 node_modules 为根目录            'node_modules',            path.resolve( dirname, 'app'),            ],            extensions: ['.js', '.json', '.jsx', '.css'], //模块的后缀名            alias :{ //除了可以用对象,也可以用数组进行详细配置            //将'module’映射成'new-module', 'module/path/file'映射成'new-module/path/file’            //通过别名映射原来的路径为新路径            'module':'new-module',            },            symlinks: true , // 是否跟随文件的软链接去搜寻模块的路径             descriptionFiles: ['package.json'],//模块的描述文件             mainFields : ['main'], //模块的描述文件里描述入口的文件的字段名             enforceExtension: false, //是否强制导入语句写明文件后缀,如果为true,导入模块必须带后缀            },        performance: { //输出文件性能检查配置            hints: false, // 关闭性能检查            maxAssetSize: 200000 , // 最大文件的大小(单位为 bytes)        },         devtool: 'source-map', //用于开发环境调试,生产环境可以不配置        devServer: {            contentBase: "./public", //本地服务器所加载的页面所在的目录            historyApiFallback: true, //不跳转            inline: true, //实时刷新            hot: true         },        target: 'web', //浏览器,默认        profile: true, // 是否捕捉 Webpack构建的性能信息,用于分析是什么原因导致构建性能不佳        cache : false , // 是否启用缓存来提升构建速度      }// }

//优化

//1.缩小文件搜索范围//* loader 调整目录结构,include缩小命中范围//* resolve 定义搜索绝对路径//* alias 映射新路径//* extensions: [’js’],尽可能减少后缀尝试搜索的可能性//* noParse 忽略没用模块化的文件

//2.用dllPlugin// 动态链接库 antd react charts

//3.HappyPack 分解任务,多线程解析和处理文件 loader最耗时 happypack/loader

//4.自动刷新 watch监听 不监听node_modules

//5.区分环境 开发和生产

//6.压缩代码 uglifyJs 压缩js;cssnano 压缩css

//7.cdn加速

//8.tree shaking 可以用来剔除js中用不上的死代码

//9.提取公共代码,组件 公共代码base.js 所有页面都依赖的基础组件库,entry配置,打包成单独的trunk

//10.分割代码按需加载 import() 返回一个promise,output配置分割出去的thunk名称,在路由或者点击按钮事件里面配置

//11.使用prepack改变源码运行逻辑 plugin 运行时优化

//12.scope hoisting 作用于提升,打包出来的代码更小,运行更快 是一个plugin

//13.输出分析 webpack analyse

//[over]

拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析相关推荐

  1. Docker入门实战看这篇就够了(最新详细以及踩过的坑)

    Docker入门实战看这篇就够了 前言 初识 是什么 容器与虚拟机 能干什么 去哪玩 安装 先决条件 查看自己的内核 安装所需的软件包(支持devicemapper存储类型) 设置镜像的仓库 设置yu ...

  2. Spring入门,看这篇就够了

    Spring入门,看这篇就够了 文章目录 Spring入门,看这篇就够了 一. 初识Spring 二.Spring Framework系统架构 三.核心概念 1.IoC(inversion of co ...

  3. Spring Cloud入门,看这篇就够了!

    点击▲关注 "中生代技术"   给公众号标星置顶 更多精彩 第一时间直达 概述 首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟. 什 ...

  4. JS日期方法操作大全,看这篇就够了

    关注前端达人,与你共同进步 译者:前端小智 原文:https://css-tricks.com/everything-you-need-to-know-about-date-in-javascript ...

  5. JS正则表达式入门,看这篇就够了

    前言 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个浏览器可以识别的规则,有了这个规则,浏览器就可以帮我们判断某些字符是否符合我们的要求.但是,我们为什么要 ...

  6. canal mysql5.6_超详细的Canal入门,看这篇就够了!

    思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言 我们都知道一个系统最重要的是数据,数据是保存在数据库 ...

  7. 【建议收藏】超详细的Canal入门,看这篇就够了!!!

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 背景 早期,阿里巴巴B2B公司 ...

  8. 【建议收藏】超详细的Canal入门,看这篇就够了。

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 背景 早期,阿里巴巴B2B公司 ...

  9. 超详细Netty入门,看这篇就够了!

    思维导图 前言 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路. 一.Netty概述 官方的介绍: ...

最新文章

  1. Kali Linux信息收集工具全
  2. 华为鸿蒙系统内部消息,华为鸿蒙系统内部曝光,并且将于年底发布?网友:还能再假点?...
  3. c#中将对象序列化为xml(包括list)
  4. 计算机组成与维修考试试题,期末考试试题计算机组成与维修.doc
  5. 改变定时器获取传感器频度_广东梅州梅县压力传感器*校对
  6. 51nod 1050 循环数组最大子段和 单调队列优化DP
  7. 【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
  8. python基础——使用list和tuple
  9. Ascii完整码表(256个)
  10. 初中英语和计算机融合的教学案例,信息技术与中学英语整合课教学案例
  11. 如何用u盘装xp系统教程
  12. null 和 undefined 的区别
  13. C#游戏实例:弹砖块游戏
  14. 国外小伙用石头提炼硅,制作芯片,号称99秒“解决”芯片危机
  15. 虚拟机ipv4和6都没访问权限_ipv4无访问权限,小编教你ipv4无internet访问权限怎么办...
  16. JPG/JEPG在十六进制文件格式
  17. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:07 规则式自然语言处理系统
  18. 启明云端分享|IDO-SOM3568:可用于轻量级人工智能应用
  19. wps交叉表_利用Excel电子表格制作交叉报表
  20. 小白的高德地图初体验(一) —— 打点

热门文章

  1. java内存泄漏案例_寻找内存泄漏:一个案例研究
  2. 我们处理了10亿个Java记录的错误-这是导致97%的错误的原因
  3. JEP 277“增强弃用”非常好。 但这是一个更好的选择
  4. 从浏览器端JavaScript代码进行服务器端日志记录
  5. 使用Zapier将应用程序与Neo4j集成
  6. 如何启动多个WebLogic托管服务器
  7. Apache Karaf遇到Apache HBase
  8. 抛出异常–缓慢而丑陋
  9. Spring Data Solr教程:向所有存储库添加自定义方法
  10. 适用于Atom Feed的Spring MVC