webpack基础篇

255 阅读2分钟

一、webpack核心概念

wepack主要有四个核心,entry(入口)、output (出口)、loader、plugin

1、entry

entry分为单入口和多入口

单入口

entry是一个字符串

module.exports = {
  entry: './path/to/my/entry/file.js',
};

多入口

entry 是一个对象

module.exports = {
  entry: {
      app:'./src/app.js','
      search:'./src/search.js'
  }
};

2、output 打包输出路径

单入口

  entry: './path/to/my/entry/file.js',
  output:{
     filenam:'bundle.js',
     path:__diraname+'/dist'
  }
};

多入口

通过占位符[name]来确保文件的唯一

module.exports = {
  entry: {
      app:'./src/app.js','
      search:'./src/search.js'
  },
  output:{
      filename:'[name].js',
       path:__diraname+'/dist'
  }
};

3、loader

webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块

loader 有两个属性:

  1. test 属性,识别出哪些文件会被转换。
  2. use 属性,定义出在进行转换时,应该使用哪个 loader。

常见的loader:

名称描述
babel-loader转换ES6,ES7等JS新特性语法
css-loader转换.css文件加载和解析
less-loader转换.less文件加载和解析
ts-loader转换ts转换JS
file-loader进行图片、字体等的打包
raw-loader将文件以字符串的形式导入
thread-loader多进程大包JS和CSS
style-loader把 CSS以style的形式 插入到 DOM 中

4、plugin

插件用于budle文件的优化,资源管理和环境变量的 注入。作用于整个构建过程

5、mode

通过选择 developmentproduction 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production

6、常用的loader使用介绍

1、解析ES6

使用babel-loader ,并配置.babelrc

需要安装:@babel/core @babel/preset-env bable-loader

module.exports = {
  entry: {
      app:'./src/app.js','
      search:'./src/search.js'
  },
  output:{
      filename:'[name].js',
       path:__diraname+'/dist'
  },
  module:{
      rules:[
          {
              test:/\.js$/,
              use:'babel-loader'
          }
      ]
  }
};

.babelrc增加babel preset配置

presets”:["@babel/preset-env"]

2、解析CSS、less

需要配置css-loader

less 需要安装less、less-loader

module:{
    rules:[
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.less$/,
        use: ['style-loader', 'css-loader','less-loader']
      },
    ]
  }
  

2、解析img

可以使用file-loader 解析,也可以使用url-loader,url-loader 可是设置最小资源 自动为baser64

 module:{
    rules:[
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.less$/,
        use: ['style-loader', 'css-loader','less-loader']
      },
      {
        test: /\.(png|svg|jpg|gif)$/,
        use: [{
            loader:'url-loader',
            options:{
                limit:10240
            }
        
        }]
      },
    ]
  },