webpack工具的使用

网页中引用的静态资源

  • JS : .js .jax .coffee .ts(TypeScript)
  • CSS: .css .less .sass .scss
  • Image: .jpg .png .gif .bmp .svg
  • Fonts(字体文件): .svg .ttf .eot .woff .woff2
  • 模板文件:.ejs .jade .vue

网页中引入的静态资源多了以后有什么问题

  1. 网页加载速度慢,需要发起很多二次请求
  2. 要处理错综复杂的依赖关系

解决方案:

  1. 合并、压缩、精灵图、图片的Base64编码
  2. 使用webpack可以解决各个包之间的复杂依赖关系
    使用Gulp,基于task任务的;使用webpack,基于整个项目的构建

什么是webpack

webpack是前端的一个项目构建工具,它是基于Node.js开发出来的一个前端工具
借助webpack可以完美实现资源的合并、打包、压缩、混淆等诸多功能

1. 安装webpack:

  • 安装webpack相关的包
npm i webpack@4.29.0 webpack-cli@3.2.1 -D
  • 在项目根文件创建名为webpack.config.js的webpack配置文件
module.exports = {
  entry: './src/main.js',
  mode: 'development' // developmnet为开发阶段,production为开发阶段
}
  • 在package.json配置文件中的script节点下,新增dev脚本
"script": {
	"dev": "webpack" // script节点下的脚本,可以通过npm run 执行
}
  • 在终端中使用npm run dev命令,启动webpack进行项目打包

2. 配置打包的入口与出口
webpack的4.x版本中默认约定:

  • 打包的入口文件为src文件下的index.js文件
  • 打包的输出文件为dist文件下的main.js文件
    需要修改打包的入口与出口文件,可在webpack.config.js中配置
const path = require('path')
module.exports = {
  // 打包的入口文件
  entry: path.join(__dirname, './src/main.js'),
  // 打包的输出文件
  output: {
    path: path.join(__dirname, './dist'), // 输出文件路径
    filename: 'bundle.js' // 输出文件名称
  },
  // 编译模式,development为开发模式,production为上线模式
  mode: 'development'
}

3. 配置webpack的自动打包功能

  • 安装支持项目自动打包的工具
npm install webpack-dev-server -D
  • 修改package.json的script节点中的dev
"script": {
  "dev": "webpack-dev-server"
}
  • 将src下的index.html文件中的script脚本的引用路径修改为“/bundle.js”

4. 配置html-webpack-plugin生成预览页面

  • 安装生成预览页面的插件
npm install html-webpack-plugin@3.2.0 -D
  • 修改webpack.config.js文件,配置如下信息
const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin({
  template: './src/index.html' // 指定要用到的模板文件
  filename: 'index.html' // 指定生成的文件名称,该文件存在于内存中,在目录中不显示
})
  • 修改webpack.config.js中向外暴露的对象,新增plugins配置节点
module.exports = {
  plugins: [ htmlPlugin ] // plugins数组是webpack打包期间会用到的一些插件列表
}

5. 配置自动打包的相关参数
在package.json中配置

// --open 打包完成后自动打开浏览器页面
// --host 配置IP地址
// --port配置端口号
"script": {
  "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
}

webpack中的加载器

1.通过loader打包非js文件
webpack默认只能打包处理以.js后缀名结尾的模块,其他非.js结尾的文件需要调用loader加载器才可以正常打包

  • less-loader 可以打包处理 .less文件
  • sass-loader 可以打包处理 .scss文件
  • url-loader 可以打包处理 css 与 url 路径相关的文件

loader的调用过程

  • 将要被webpack打包处理的文件是否为js模块,
  • 1.1 如果包含了js文件且不包含高级js语法,直接使用webpsck处理
  • 1.2 如果包含了js文件且包含高级js语法,判断是否配置了babel,配置类babel就调用loader处理,否则报错;
  • 2.1 不是js模块,判断是否配置了对应的loader,配置了对应的loader就调用loader处理,否则报错。

2. 打包处理css文件

  • 安装处理css文件的loader
npm i style-loader css-loader -D
  • 在webpack.config.js文件的module的rules数组,添加loader规则
// 所有第三方模块的匹配规则
module: {
  rules: [
  // test表示匹配的文件类型, use表示对用要调用的loader
  { test: /\.css$/, use: ['style-loader', 'css-loader']}
  ]
}

注意: use数组中指定的loader顺序是固定的;多个loader的调用顺序是从后往前

3. 打包处理less文件

  • 安装处理less的loader
npm i less-loader@4.1.0 less -D
  • 在webpack.config.js的module的rules中添加loader
  module: {
      rules: [
          // test:匹配的文件名,use对用要调用的loader
          { test: /\.css$/, use: ['style-loader', 'css-loader', 'less-loader']}
      ]
  }

4. 打包处理scss文件

  • 安装处理scss的loader
npm i sass-loader@7.x sass -D
  • 在webpack.config.js的module的rules中添加loader
  module: {
      rules: [
          // test:匹配的文件名,use对用要调用的loader
          { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader']}
      ]
  }

5. 配置postCSSzidong 添加css的兼容前缀
浏览器不兼容

  • 安装loader
npm i postcss-loader autoprefixer -D
  • 在项目根目录创建postcss的配置文件postcss.config.js
const autoprefixer = require('autoprefixer')
module.exports = {
  plugins: [ autoprfixer ]
}
  • 在webpaxk.config.js的module中修改css的loader规则
// 所有第三方模块的匹配规则
module: {
  rules: [
  // test表示匹配的文件类型, use表示对用要调用的loader
  { test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader']}
  ]
}

打包样式中的图片和字体文件

  • 安装loader
npm i url-loader file-loader -D
  • 在webpaxk.config.js的module中rules数组添加loader规则
// 所有第三方模块的匹配规则
module: {
  rules: [
  // test表示匹配的文件类型, use表示对用要调用的loader
  { test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, use: 'url-loader?limit=549941'}
  ]
}

其中?之后是loader的参数项,limit用来指定图片的大小,单位byte,只有小于limit大小的图片才会被转为base64图片

7. 打包处理js文件中的高级语法

  • 安装babel相关的包
npm i babel-loader @babel/core/ @babel/runtime -D
  • 安装babel语法插件相关的包
npm i @bable/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -d
  • 在项目根目录创建babel.config.js文件
module.exports = {
    presets: ['@babel/preset-env'],
    plugins: ['@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties']
}
  • 在webpack.config.js的module中rules数组中添加loader规则
module: {
  rules: [
  // test表示匹配的文件类型, use表示对用要调用的loader
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/}
  ]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值