webpack配置指南

Posted 夨坕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack配置指南相关的知识,希望对你有一定的参考价值。

webpack概述

webpack 是一个现代 javascript 应用程序的静态模块打包器(module bundler )

webpack中文网

webpack官网

webpack做了什么

  • 语法转换

    • less/sass转换成css
    • ES6转换成ES5
    • typescript转换成js
  • html/css/js代码的压缩与合并(打包)
  • webpack可以在开发期间提供一个开发环境

    • 自动开启浏览器
    • 自动监视文件变化
    • 自动刷新浏览器
  • 项目一般都需要经过webpack打包之后才上线。

webpack模块说明

webpack会把所有的资源都当成模块

  • css
  • js
  • 图片
  • 字体图标

webpack给前端开发提供了模块化的开发环境

  • 对于js文件,webpack中支持AMD、CMD、commonJS、ES6模块化等语法
  • 有了webpack,我们可以在前端代码中使用任意的模块化语法
  • 可以在浏览器中使用nodejs的模块化语法const $ = require(\'jquery\')

webpack基本使用

  • 创建一个文件夹webpack-demo
  • 初始化项目 生成package.json
yarn init -y
  • 安装webpack的依赖包
yarn add webpack webpack-cli -D
  • 新建文件srcdist文件夹,,src用于提供源码,,dist用于存放打包后的文件
  • 在src下新建了index.js文件,目的:对src/index.js文件进行打包
  • 在package.json文件配置了打包的脚本
  "scripts": {
    "build": "webpack --config webpack.config.js"
  }
  • 在项目的根目录,创建一个文件webpack.config.js
  • 执行打包命令
yarn build

配置webpack的打包入口

  • webpack.config.js文件中
// 这是webpack的配置文件
// webpack是运行在node环境中,webpack可以执行任意的node代码,包括可以使用node中模块。
module.exports = {
  // 默认: ./src/index.js
  entry: \'./src/app.js\'
}

配置webpack的打包出口

配置webpack最终打包的文件的出口
  // 配置webpack打包出口
  output: {
    // path: 打包出口的目录,默认 dist, 必须指定绝对路径
    path: path.join(__dirname, \'lib\'),
    // filename: 打包出口的文件名字  默认 main.js
    filename: \'bundle.js\'
  }

==如果要配置path,记得是绝对路径==

配置webpack的打包模式

  // 打包模式  development|production
  // development: 打包不会对进行压缩   打包快
  // production: 打包会对代码进行压缩  上线
  mode: \'development\'

配置html-webpack-plugin插件

html-webpack-plugin插件能够帮助我们自动在dist中生成一个html文件,并且会自动帮我们引入打包后的文件。
  • 安装html-webpack-plugin插件
yarn add html-webpack-plugin -D
  • webpack.config.js中配置
//1. 导入html-webpack-plugin插件
const HtmlWebpackPlugin = require(\'html-webpack-plugin\')

// 2.配置webpack的插件,是一个数组
plugins: [new HtmlWebpackPlugin({
  // 生成html的模板
  template: \'./src/index.html\'
})

配置css-loader处理css文件

webpack天生只能处理js文件,如果需要处理其他类型的文件,需要配置loader
  • 安装依赖包
yarn add css-loader style-loader -D
  • 配置loader
module: {
  rules: [
    // 配置css-loader的规则
    {
      // 匹配所有.css结尾的文件
      test: /\\.css$/,
      // 使用css-loader 和 style-loader处理
      use: [\'style-loader\', \'css-loader\']
    }
  ]
}

==注意:loader加载顺序从右往左==

配置less-loader处理less文件

  • 安装依赖包
yarn add less-loader less -D
  • 配置less-loader
// 配置less-loader的规则
{
  // 匹配所有.less结尾的文件
  test: /\\.less$/,
    // 使用css-loader 和 style-loader处理
    use: [\'style-loader\', \'css-loader\', \'less-loader\']
}

配置file-loader处理图片

  • 安装依赖包
yarn add file-loader -D
  • 配置file-loader
// file-loader配置
{
  test: /\\.(png|jpg|gif)$/,
  use: \'file-loader\'
}

配置url-loader处理图片

  • 安装
yarn add url-loader file-loader -D
  • 配置url-loader
{
  test: /\\.(png|jpg|gif)$/,
  use: {
    loader: \'url-loader\',
    options: {
      limit: 20 * 1024
    }
  }
}

配置字体图标和音视频

// 字体图标
{
  test: /\\.(eot|svg|ttf|woff)$/,
  use: {
    loader: \'url-loader\',
    options: {
      limit: 20 * 1024
    }
  }
},
{
  test: /\\.(mp3|mp4|ogg)$/,
  use: {
    loader: \'url-loader\',
    options: {
      limit: 20 * 1024
    }
  }
}

配置babel-loader

babel可以把高版本的js语法转成低版本的js语法,保证运行的效果一样。能够兼容更多的浏览器。
  • 安装依赖包
yarn add  babel-loader @babel/core @babel/preset-env -D
  • 配置babel
{
  test: /\\.m?js$/,
  exclude: /(node_modules|bower_components)/,
  use: {
    loader: \'babel-loader\',
    options: {
      presets: [\'@babel/preset-env\']
    }
  }
}

提取css到单独的文件中

  • 安装插件
yarn add mini-css-extract-plugin -D
  • 配置插件
const MiniCssExtractPlugin = require(\'mini-css-extract-plugin\');

// 配置插件
plugins: [
  new MiniCssExtractPlugin({
    // 指定生成的css文件名和路径
    filename: \'./index.css\',
  })
],
  • 配置css和less的loader
{
  test: /\\.css$/,
  // css-loader只能够让webpack能够处理css文件
  // style-loader: 能够把处理好的css代码添加到页面中
  // MiniCssExtractPlugin.loader ; 把css提取到单独的css文件中
  use: [MiniCssExtractPlugin.loader, \'css-loader\']
},
{
  test: /\\.less$/,
  use: [MiniCssExtractPlugin.loader, \'css-loader\', \'less-loader\']
},

webpack-dev-server的使用

webpack-dev-server不是用来打包的,而是用于启动一个服务器,,,,,当我们代码发生了改变,webpack-dev-server会重新打包(内存)并且会刷新浏览器,实时看到效果

最新版本的webpack5还不支持,需要降级处理

"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0"
  • 安装包
yarn add webpack-dev-server -D

# 注意:如果需要使用webpack-dev-server  就不能使用最新的webpack5版本, 应该使用webpack 4
  • 配置一个脚本
  "scripts": {
    "build": "webpack --config webpack.config.js",
    "serve": "webpack-dev-server --config webpack.config.js"
  },
  • 使用dev脚本
yarn serve
  • 常见配置
  // devServer的配置
  devServer: {
    // 自定义端口
    port: 9090,
    // 自动打开浏览器
    open: true
  }

webpack处理vue文件

  • 新建了一个App.vue文件
<template>
  <div class="app">我是根组件 ---{{msg}}  --<demo></demo> </div>
</template>

<script>
export default {
  data() {
    return {
      msg: \'hello\'
    }
  },
}
</script>

<style>
.app {
  background-color: red;
}
</style>
  • 在main.js中导入App.vue根组件,并且渲染成为根组件
import Vue from \'vue\'
import App from \'./App.vue\'

const vm = new Vue({
  el: \'#app\',
  // 把App组件渲染成根组件
  render: c => c(App),
  // 把app渲染成为根组件
  // render: function(createElement) {
  //   return createElement(App)
  // }
})
  • 报错,因为webpack处理不了vue文件
  • 安装依赖包
yarn add vue-loader@15.9.0 vue-template-compiler -D
  • 在webpack.config.js中配置vue-loader
const VueLoaderPlugin = require(\'vue-loader/lib/plugin\')

  plugins: [
    new VueLoaderPlugin()
  ],

    rules: [
      {
        test: /\\.vue$/,
        loader: \'vue-loader\'
      }
    ]

配置文件

/* webpack的配置 */
const path = require(\'path\')
const HtmlWebpackPlugin = require(\'html-webpack-plugin\')
const VueLoaderPlugin = require(\'vue-loader/lib/plugin\')
const MiniCssExtractPlugin = require(\'mini-css-extract-plugin\')
module.exports = {
  // 打包入口
  entry: \'./src/main.js\',
  // 打包出口
  output: {
    // 配置文件
    filename: \'app.js\',
    // 配置默认的打包出口路径,,,必须是绝对路径
    // path: path.join(__dirname, \'lib\')
  },
  // 打包模式
  mode: \'development\',
  plugins: [
    new HtmlWebpackPlugin({
      template: \'./public/index.html\'
    }),
    new VueLoaderPlugin(),
    new MiniCssExtractPlugin()
  ],
  module: {
    rules: [
      // 处理css
      {
        test: /\\.css$/,
        use: [MiniCssExtractPlugin.loader, \'css-loader\']
      },
      {
        test: /\\.less$/,
        use: [MiniCssExtractPlugin.loader, \'css-loader\', \'less-loader\']
      },
      {
        test: /\\.(png|jpg|gif)$/,
        use: {
          loader: \'url-loader\',
          options: {
            limit: 20 * 1024
          }
        }
      },
      {
        test: /\\.m?js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: \'babel-loader\',
          options: {
            presets: [\'@babel/preset-env\']
          }
        }
      },
      {
        test: /\\.vue$/,
        loader: \'vue-loader\'
      }
    ]
  },
  devServer: {
    open: true,
    port: 8888
  }
}

我的博客:http://hellozhb.top/

以上是关于webpack配置指南的主要内容,如果未能解决你的问题,请参考以下文章

现代前端库开发指南系列:使用 webpack 构建一个库

Webpack入门指南: 入口,输出,加载器和插件

webpack指南命令行环境配置

webpack-dev-server配置指南(使用webpack3.0)

webpack-dev-server配置指南webpack3.0

Webpack指南:安装,创建项目,配置文件,开发环境以及问题汇总