webpack总结(更新中...)

什么是Webpack-----模块打包工具

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。

Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。


1.webpack的安装:

//全局安装

npm install -g webpack

使用: webpack 入口文件名

//安装到你的项目目录

npm install --save-dev webpack

使用:npx webpack 入口文件名

2.webpack的配置文件

module.exports = {

entry: __dirname +"/app/main.js",//唯一入口文件

output: {

path: __dirname +"/public",//打包后的文件存放的地方

filename:"bundle.js"//打包后输出文件的文件名

            }

}

使用:npx webpack //配置好可以省略文件名

注:npx webpack --config webpack.config.js //修改了webpack.config.js 名称时候,可以用该指令指定执行的webpack配置文件,官方文档描述:使用 --config 选项只是向你表明,可以传递任何名称的配置文件。这对于需要拆分成多个文件的复杂配置是非常有用;

:“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录

3.更快捷的执行打包任务

在package.json中对scripts对象进行相关设置

{

  "name": "vue-manage-system",

  "version": "3.1.0",

  "description": "基于Vue.js 2.x系列 + element-ui 内容管理系统解决方案",

  "author": "lin-xin <[email protected]>",

  "private": true,

  "scripts": {

    "bundle":"webpack",// 可以使用 npm run bundle 命令,来替代我们之前使用的 npx 命令

    "build": "node build/build.js",

    "build:dll": "webpack --config build/webpack.dll.conf.js"

  }

}

使用:npm run bundle

4.运行webpack的方式:

@1:webpack index.js(全局)

@2:npx webpack index.js

@3:npm run bundle

5.做webpack打包时候,输出的提示命令含义

Hash:本地打包对应的唯一hash值

version:本次打包使用的webpack版本

time:当前打包耗时

asset:打包出的文件名 

size:文件大小

chunks:复杂打包时候,其他打包js的id也会放在bundle.js的chunks字段中

chunks Names:同上,每个js文件对应的名字

entrypoint main = bundle.js  对应的是配置中入口文件的名字

警告:webpack没有配置打包环境和模式时候会报警告

默认的模式是:

mode:'production'//(代码压缩)webpack中配置,可选:development(代码未压缩)

6.使用loader打包静态资源【图片篇】,配置文件中进行配置

module: {

    rules: [{

        test:/\.jpg$/,

        use:{

            loader:'file-loader'

                }

            }]

}

以上配置代码含义:打包模块以jpg结尾的文件,使用file-loader来帮助我们做jpg文件的打包(若没有则需要安装npm install file-loader -D)

file-loader底层帮我们做的事情:

当他发现在代码里引入图片模块时候,会把这个模块,帮助打包移动到dist目录下;

得到图片(相对于dist目录的)名称,将名称作为返回值,返回给我们引入模块的变量之中;

7.loader是什么?

loader就是一个打包方案,知道对于某个特定文件,webpack该如何进行打包;

官方文档定义,loader用于对模块的源代码进行转换,可以使你在 import 或"加载"模块时预处理文件,可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!

通俗理解的话,就是,由于webpack不能识别非js结尾的模块,所以通过loader使webpack识别出来(loader的作用)

如何配置loader:webpack.config.js中  配置module-rules(符合的规则)

拓展:配置loader--在module-rules-options中进行配置

module: {

    rules: [{

            test:/\.jpg$/,

            use:{

            loader:'file-loader',

            options:{

                       name:'[name].[ext]'//占位符:原始名.后缀

                        outputPath:'images/' //当我遇到jpg文件时候,打包时候将其打包生成到dist/images的文件夹里

                        }

                }

            }]

}

8.使用loader

在你的应用程序中,有三种使用 loader 的方式(详见官方文档):

配置(推荐):在 webpack.config.js 文件中指定 loader。

内联:在每个 import 语句中显式指定 loader。

CLI:在 shell 命令中指定它们。

9.使用loader打包静态资源【图片篇】,更多配置

url-loader可以实现file-loader所实现的一切功能

当使用url-loader会将图片转化成一个base64的字符串,然后直接放到js文件里,不是直接生成图片

好处:省略http请求

缺点:图片文件大的时候会影响加载速度

因此,可以对图片的大小进行判断,图片较小时候放到js中,较大时候生成图片,使用limit配置

module: {

    rules: [{

            test:/\.jpg$/,

            use:{

            loader:'file-loader',

            options:{

                        name:'[name].[ext]'//占位符:原始名.后缀

                        outputPath:'images/' //当我遇到jpg文件时候,打包时候将其打包生成到dist/images的文件夹里        

                        limit:2048//图片小于2048时候,图片转化成一个base64的字符串,放到js文件里,大于2048时候,生成图片引入

                        }

                }

            }]

}

10.使用loader打包静态资源【样式篇】

@1.需要用css-loader和style-loader配合使用

css-loader:  分析出几个css文件之间的关系,最终把这些css文件合并成一段css

style-loader: 在得到css-loader生成的内容之后,会把这段内容挂载到页面的head部分

@2.使用less,scss,stylus等的时候,需要添加额外对应的loader来进行编译

{

        test: /\.less$/,

        loader: ['style-loader','css-loader','less-loader','postcss-loader']

        //或者loader: "style-loader!css-loader!less-loader"

      }

注:loader是有执行顺序的(从下到上,从右到左)

@3.postcss-loader: 自动添加厂商前缀;

使用postcss-loader需要目录中创建postcss.config.js文件(详见文档)

配置如下:

module.exports = {

  "plugins": {

        require('autoprefixer')//需要下载

  }

}

@4.补充:css配置项

imporeLoaders:2

作用:当less中再去@import less文件时候,webpack打包时候可能不会走postcss-loader和less-loader,而直接去走css-loader了,那么则需要用imporeLoaders去规定,通过import引入的less文件,在引入之前,也要去走2个loader;就会保证不管是在js直接引入less文件还是less中@import引入less文件都会执行所有的loader

{

        test: /\.less$/,

        loader: [

            'style-loader',

            {

            loader:'css-loader',

            options:{

                    importLoaders:2

                    }

            },

            'less-loader',

            'postcss-loader']

      }

@5.样式模块化:防止样式耦合、冲突

在js中引入的less是全局的,因此可以使用模块化css(即该css在特点的模块内有效)

配置options中的modules

{

        test: /\.less$/,

        loader: [

            'style-loader',

            {

            loader:'css-loader',

            options:{

                    importLoaders:2,

                    modules:true,//

                    }

            },

            'less-loader',

            'postcss-loader']

      }

使用:

import style from ‘ /css路径’

img.classList.add(style.avatar)

11.使用loader打包静态资源【字体篇】

file-loader 和 url-loader 可以接收并加载任何文件,然后将其输出到构建目录

字体配置使用file-loader 进行配置

12.使用 plugins 让打包更便捷

1.安装: npm install html-webpack-plugin -D

2.使用:var HtmlWebPackPlugin = require('html-webpack-plugin');//引入

3.在webpack.config.js中配置:plugins:[]

你可能感兴趣的:(webpack总结(更新中...))