webpack 入门到 应用

webpack本质上是一个 javascript 程序的静态模块打包器,

webpack的意义

 

 

 

一、入门

1、新建一个文件夹(也可以理解为项目)webpack-demo,如何在文件夹下新建两个目录 dist (存放打包之后的文件资源)、src(打包前的业务逻辑代码);

2、在src下新建一个 main.js(可以写一些逻辑代码),再新建一个index.html文件

3、webpack初始化 ,把当前文件夹(项目)在终端打开,输入初始化命令 npm init -y ,初始化完成之后,webpack会自动给项目配置一个 package.json 文件

4、按照webpack依赖包  npm add webpack webpack-cli -D;webpack-cli(webpack手脚架),-D(development 开发环境),整体意思就是 这个打包依赖只是在开发环境使用,正式环境不需要,

 依赖包安装完成之后,项目下会自动配置node_modules、package-lock.json 两个文件。

5、配置打包命令;build命令打包 webpack.config.js 文件

    

6、新建 webpack.config.js 配置文件,初始配置如下,配置参考官网 https://www.webpackjs.com/

       

 

 7、打包;基本配置基本完成,现在打一个简单包,终端输入 npm run build 命令,dist 文件下会生成 配置好的 bundle.js,bundle.js里就可以看到经过打包的内容了

 

 二、拓展应用

1、多文件打包;SRC下有很多业务打包需要打包的时候,但是打包的入口文件就只有 main.js 。

  如SRC下还有一个自定义index.js文件需要一起打包

  index.js 

  

 

   main.js 需要通过node模块化规范 reqiure 引入index.js

  

 

 

2、插件:先看官网文档

 

   2.1 配置 html-webpack-plugin 插件:

    ① 安装 npm add html-webpack-plugin -D(终端输入即可)

    ② 配置文件 webpack.config.js 中引入插件 const htmlWebpackPlugin = reqiure('html-webpack-plugin')

    ③ 配置 plugins 

    

 

     输入打包命令 npm run build 

    打包完成,你会发现在dist 文件下也会出现一个 index.html ,且内容也是一模一样,不同点就是 script 引入的脚本文件是自动配置的出口文件bundle.js

    

 

     dist/index.html

    

 

 

3、loader 

 

  3.1  css-loader

  首先在SRC文件下新建CSS文件,再在 CSS 文件下 base.css

  

 

   base.css

  

 

   index.html (在这里不需要再用link引入css样式了)

  

 

   

  ① 安装 css-loader、style-loader ( npm add style-loader css-loader -D )

  ② main.js 引入 css 文件

  

 

   ③ 配置文件 webpack.config.js中配置

  

   打包之后刷新

  

 

   是通过style动态创建了一个样式,那么问题来了,如果有非常多的样式呢?这样做显然不是很合理,接下来就要用到css文件分离

 

4、css文件分离 ( mini-css-extract-plugin )

  首先在css文件下新建一个CSS叫index.css,html 文件新增一个DIV 

  

 

   ① 安装插件  npm add mini-css-extract-plugin -D

   ② main.js 中引入 index.css (同上)

 

   ② 配置文件webpack.config.js配置 以及 引入插件

  

 

   打包运行结果:

 

 

5、less文件处理 (和css大同小异)

  首先在SRC 下新建 less文件夹 再再less文件夹下新建 index.less 文件

  

 

 

  ① 再main.js中 引入 less文件

  

 

 

   ② 安装 less 依赖  npm add less less-loader -D

   ③ webpack.config.js文件中配置 less

   

 

 

   打包运行结果:

  

 

 

 

6、url-loader 图片处理配置

  首先SRC下新建img文件夹,在img文件夹下放两张图片,写好相应的HTML,写好相应的样式

     

   6.1 webpack图片加载

   ① 安装url-loader插件  npm add url-loader file-loader (注意:因为URL也是属于文件的一个类别,所以在这里也要把文件处理插件 file-loader 也安装上)

   ② webpack.config.js 配置

   

  注意:如果是图片大于8K,打包之后dist目录下会生成图片文件,接下来会做讲解方案

    

 

 

 

  6.2 webpack图片输出

   如果很多图片都超过8K,那么打包之后dist目录下会生成很多图片文件,这样显然不是很合理

  下面做个配置就可以把打包之后的所有图片放到一个目录下管理

  

 

 

  打包之后目录:

  

 

 

    上面例子其实可以举一反三,基本原理都是差不多

  例:现在要把打包之后的JS文件放到一个统一的JS文件夹下管理,该怎么配?

   

 

 

 

7、dist 目录清除插件 clean-webpack-plugin (每次打包都会清除本次打包之前的dist目录,保留本次打包的最新dist)

  ① 安装依赖包 npm add clean-webpack-plugin -D 

  ② webpack.config.js 配置

  

 

   

 

 8、bable (ES6及更高版本语法兼容,转换成浏览器可识别的JS语法)

  ① 安装依赖  

  npm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env 

   ② webpack.config.js 配置

  

 

  打包结果:

    

 

 

 

 9、开发服务器配置(热更新)

   ① 安装依赖 

      npm install webpack-dev-server -D

         ② 配置 package.jaon 里的打包命令行 

    

 

   ③ webpack.config.js 配置文件

  

 

   执行 npm run dev ,页面刷新

   

10、生产环境、开发环境分离配置

  因之前的所有的配置都是在 webpack.config.js 中进行,不是特别的灵活方便,所以进行环境分离很有必要,

  开发环境:配置开发环境所需要的配置

  生产环境:配置生产环境所需配置

  

  10.1 安装 webpack-merge 依赖 

    npm install webpack-mergr -D

  10.2 webpack.config.js 配置文件拆分

  

 

 

  公共文件 webpack,base.js 配置基本除了mode 和 server 以外,都需要配置

  

 

  webpack.dev.js 配置

  

 

   webpack.pro.js 配置

  

 

   package.json (命令行打包路径发生了改变,所以路径也要更改)

  

 

 二、优化

  1、公共模块提取:利用 splitChunks 进行公共脚本分离(大于30K才会提取),Webpack4内置的插件无需安装,替代CommonsChunkPlugin插件。

  

 

   好处:1、多个需要打包的文件如果都依赖一个公共的模块,就会导致公共模块打包时会被多次打包,导致打包速度慢。

      2、每个打包之后的文件也会包含公共依赖,导致文件体积很大

      3、文件加载时,如果不提取,每个文件都会重复加载一次公共模块,首屏加载慢

 

  

  

 

posted @ 2020-11-30 15:47  尼古拉斯-富贵  阅读(149)  评论(0编辑  收藏  举报