美文网首页
webpack4 配置篇

webpack4 配置篇

作者: MrAlexLee | 来源:发表于2019-12-28 00:13 被阅读0次

基本使用

1,默认打包入口文件是 src 下面的 index.js 文件

2,webpack -v 是在系统-G 全局安装下才能使用的命令,在当前项目下看版本使用 npx webpack -v

3,查看 webpack 的所有版本信息命令:npm info webpack,安装指定版本@x.xx.x

4,webpack 默认认识 JS 模块,模块打包器,会把一切文件认作是模块,比如说图片,css 模块,但是需要 loader

5,此时就需要一个配置文件来对图片,css 模块进行配置,webpack 默认的配置文件是 webpack.config.js,如果不是以这个名字命名,那么可以指定配置文件xxx.js,npm webpack --config xxx.js

6,如果文件夹名称是 src,且 src 文件夹下面也有 index.js 文件,且在根目录下面配置了 webpack.config.js,那么优先配置文件

7,publicPath,打包后路径的前缀

loader

1,模块转换器,把原内容按照需求转换成新内容

2,file-loader,处理字体,图片,csv,Excel等。应用场景:当我们需要模块仅仅是从源代码 src 文件夹中转移到打包目录,就可以使用 file-loader

3,url-loader ,是 file-loader的加强版。会将小图片转换成 base64

4, css-loader处理 CSS 文件, style-loader是基于 JS 的,网 HTML 文件里动态加代码

5,sass-loader 需要和 node-sass一起安装

6, postcss-loader,添加前缀,autoprefixer 是一个 plugin,用于 postcss-loader

非 webpack 内置plugins

1,html-webpack-plugin

配置 HTML 模板文件

2,clean-webpack-plugin

清空 dist 目录

3,mini-css-extract-plugin

使用这个 plugin 的时候不能使用 style-loader 了,style-loader 的作用是将 CSS 文件动态插入 HTML 里面,但是这个插件是为了将 样式文件单独生成 CSS 文件,然后使用 link 方式动态引入

webpack内置的plugin

webpack-plugin-hmr 热模块替换

不用刷新浏览器实现局部更新

devtool

在配置 devtool 里面配置。devtool 可以取值如下

开发环境:cheap-module-eval-source-map

生产环境:cheap-module-source-map

webpack-dev-server

主要是下面四个配置

proxy

open

contentBase

port

babel,主要是下面的配置

babel-loader

@babel/core

@babel/preset-env 这是 option 配置,转换 ES6 语法,但是还不够,新特性还需要 polyfill 来转换

@babel/polyfill 是注入到全局变量windows下面的,会污染全局环境,所以推荐闭包的方式,所以就用到了@babel/plugin-transform-runtime,按需注入需要进行配置

按需注入的配置

          "presets":[  
            ["@babel/preset-env",  
            {  
              "targets":{  
                "edge":"17",  
                "firefox":"60",  
                "chrome":"67",  
                "safari":"11.1"  
              },//目标浏览器的版本  
              "useBuiltIns":"usage",//按需注入polyfill 的垫片,如果不配置的话,需要在 JS 文件里面导入@babel/polyfill  
              "corejs":2  
            }  
          ]  
          ]  

@babel/plugin-transform-runtime 这种方式不常用,可以实现按需注入

          "plugins":[  
            [  
              "@babel/plugin-transform-runtime",  
              {  
                "absoluteRuntime":false,  
                "corejs":2,  
                "helpers":true,  
                "regenerator":true,  
                "useESModules":false  
              }  
            ]  
          ]  

react打包环境配置

依赖 react

依赖 react-dom

语法依赖@babel/preset-react

配置文件

          "presets":[  
            ["@babel/preset-env",  
            {  
              "targets":{  
                "edge":"17",  
                "firefox":"60",  
                "chrome":"67",  
                "safari":"11.1"  
              },//目标浏览器的版本  
              "useBuiltIns":"usage",//按需注入polyfill 的垫片,如果不配置的话,需要在 JS 文件里面导入@babel/polyfill  
              "corejs":2  
            }  
          ],”@babel/preset-react”  
          ]  
  • tree shaking

凡是没有 export 的东西类似 css 组件polyfill 等,需要写数组来进行排除

optimization 配置

在 webpack 里面进行配置

        optimization: {  
            usedExports:true,  
        }  

在 mode 为 development 情况下,我们可能看不到效果,但是能在打包后的文件中看到注释的变化,大概意思是,提供了多个导出函数,但是实际上只用到了某一个或者某几个。
另外就是注意将 mode 改为 production 以后,要将 devtool 改一下,这样打包出来的dist代码才会将没用到的代码去掉,
当 mode 为 production 的时候,optimization 配置可以不用加,线上环境自动摇树。所以这个 optimization 的配置是针对开发环境提高打包效率的

sideEffects 配置

这个字段在 package.json 里面添加,默认值为 false,即对所有文件进行摇树,只要是没有 export 的类似 css 文件,polyfill 文件都不会打包进去。举个栗子
在 index.js 文件中我们引入 css 文件
import ' ./css/index.css '
这样的写法不同于
import a from ' ./a '
是没有实质性导出的,这种都会被摇下来,不添加到打包的文件里面。如果确实是需要 css 文件,那么需要这样配置
sideEffects :[' *css ' , ' @babel/polyfill ']

webpack-merge

code-spliting

业务代码与需求经常变,第三方库不要打包进来,可以加快打包速度,

懒加载

预加载

相关文章

网友评论

      本文标题:webpack4 配置篇

      本文链接:https://www.haomeiwen.com/subject/demjoctx.html