webpack 5个核心基础概念(一篇掌握)

简介: webpack 5个核心基础概念(一篇掌握)

目录


前言


webpack明明在各大脚手架中都配好了,个人想要自定义配置无疑费时费力,不过奈何面试总会问,还是要掌握一些基础,做个了解,针对5个核心基础概念entry(入口)、output(输出)、module(依赖loader)、plugins(插件)、mode(模式)进行一个基础记录。


依赖


需要在项目中添加webpack和webpack-cli依赖。


因为只在开发环境需要,因此-D。

npm i webpack webpack-cli -D

package.json加入打包命令"build": "webpack",在项目根目录执行yarn build或npm run build即可执行webpack打包。

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    ...
    "build": "webpack"
  },

核心概念


  1. 配置文件命名为webpack.config.js,我用的es的模块,其他模块同理。
  2. 主要配置在config中,entry(入口)、output(输出)、module(依赖loader)、plugins(插件)、mode(模式)
const config = {
  entry: {
    main: './index.js',
    other: './other.js'
  },//或''或[]
  output: {
     filename: "[name].js",
  },
  module: {
    rules: [
      {
        test:...,
        use:...
      },
      {
        test:...,
        use:...
      },
    ],
  },
  plugins: [...],
  mode: "production",//或development
};
export default config;

1.entery(入口)

  1. 可以填写三种形式:
  1. 对象,键值对指明入口地址,属性为名称,在出口output中可以用[name]获取属性名。


entry: {
  main: "./index.js",
  other: "./other.js"
},


字符串,单个入口可以直接用字符串填写入口路径,名称默认为main。


entry: './index.js'


等同于


entry: {
 main: "./index.js",
},


数组,与对象一样可以多入口,就是数组无法区分名称。


entry:  ['./index.js','./other.js']

使用对象形式时,可以对单个入口进行一些配置修饰,需要将地址再嵌套进一层对象,并在对象中加入属性进行配置。

-dependOn: 当前入口所依赖的入口。它们必须在该入口被加载前被加载。

-filename: 指定要输出的文件名称。

-import: 启动时需加载的模块。

-library: 指定 library 选项,为当前 entry 构建一个 library。

-runtime: 运行时 chunk 的名字。如果设置了,就会创建一个新的运行时 chunk。在webpack 5.43.0 之后可将其设为 false 以避免一个新的运行时 chunk。

-publicPath: 当该入口的输出文件在浏览器中被引用时,为它们指定一个公共 URL 地址。请查看 output.publicPath。

entry: {
 main: {
   import: "./index.js",             
 },
 other: {
   dependOn: 'main',
   import: "./other.js",
 },
}

2.output(输出)

  1. 对象类型,属性filename决定打包后的文件名。
   output: {
     filename:'bundle.js'
   }

打包多个文件,但是仍然只能配置一个filename,入口如果是对象形式存在命名,可以使用[name]。

   output: {
     filename:'[name].js'
   }

path指定打包文件夹,不指定的话默认打包到dist文件夹

import path from "path";
const __dirname = path.resolve();
...
   output: {
     path: __dirname + "/otherName",
     filename:'[name].js'
   }

[contenthash]可以在名称中添加哈希随机数。


output: {
     filename:'[name]-[contenthash].js'
   }


3.module(依赖loader)


  1. 因为webpack默认只能打包js文件,无法识别其他文件(css、ts、less等等),module属性允许你添加loader处理不同的其他文件。
  2. 每个loader都得单独下载依赖,例如css。
npm i  css-loader -D


module,对象格式,rules属性是数组格式,里面每个对象两个属性test与use,test正则匹配文件名,use填写对应的loader。

module: {
 rules: [
   {
     test: /.css$/,
     use: "css-loader"
   },
   {
     test:...,
     use:...
   },
 ],
},

可以写成对象形式,好处是可以添加options对应loader的配置,至于有哪些内容要查相关文档。

module: {
 rules: [
   {
     test: /.css$/,
     use: { loader: "css-loader",options: {...} }
   },
 ],
},

use可以配置成数组,意思是对一种文件要使用多种loader处理,注意,顺序是从下至上开始,下面例子先执行css-loader、再执行style-loader。

module: {
 rules: [
   {
     test: /.css$/,
     use: [
       { loader: "style-loader" },
       { loader: "css-loader" },
     ]
   },
 ],
},

4.plugins(插件)


  1. loader无法处理所有的事,因此我们需要各种插件完成剩下的一些功能。
  2. 例子,例如打包和压缩处理html文件。
npm i  html-webpack-plugin -D
import webpack from "webpack";
import HtmlWebpackPlugin from "html-webpack-plugin";
...
  plugins: [
   new webpack.ProgressPlugin(),
   new HtmlWebpackPlugin({ template: "./index.html" }),
  ],

5.mode(模式)


可选值有none、development、production(默认),一般只用到后两种。

development开发模式打包后会存在一些webpack注释,用于开发时使用。(会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 development. 为模块和 chunk 启用有效的名)

production生产模式,打包内容很干净。(会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 production。为模块和 chunk 启用确定性的混淆名称,FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,ModuleConcatenationPlugin,NoEmitOnErrorsPlugin 和 TerserPlugin )


相关文章
|
前端开发 JavaScript
webpack学习笔记(一) 核心概念
webpack学习笔记(一) 核心概念
77 0
|
JSON JavaScript 前端开发
webpack基础篇(二):webpack核心概念
webpack基础篇(二):webpack核心概念
117 0
webpack基础篇(二):webpack核心概念
|
缓存 JSON 前端开发
【Vue五分钟】五分钟了解webpack的高级概念
其实如果配置了 useBuiltIns 就不会需要再 import babel profill。 实际上目前的话虽然只是引入了某个模块的某个方法,在打 包还是会把模块的所有方法引入,最好是引入什么打包什么, 这就需要 tree shaking,摇掉不需要的内容。
【Vue五分钟】五分钟了解webpack的高级概念
|
监控 JavaScript 前端开发
【Vue五分钟】 五分钟了解webpack的核心概念
如果 webpack 不知道怎么打包某些模块(默认只知道打包 JS) 就需要我们在 module 中配置规则 rules 了,比如说图片
【Vue五分钟】 五分钟了解webpack的核心概念
|
JSON JavaScript 前端开发
webpack 之 概念(1)
webpack 之 概念(1)
63 0
webpack 之 概念(1)
|
资源调度 JavaScript 前端开发
webpack 的概念和基础使用
webpack 的概念和基础使用
223 31
|
JavaScript
Vue课程4-了解webpack的概念
Vue课程4-了解webpack的概念
80 0
Vue课程4-了解webpack的概念
|
JavaScript 前端开发
零基础学习Webpack—01(Webpack的五个核心概念)
零基础学习Webpack—01(Webpack的五个核心概念)
271 0
零基础学习Webpack—01(Webpack的五个核心概念)
|
缓存 JavaScript 前端开发
webpack基本概念及配置
一、基本概念 入口(entry) 输出(output) 装载(loader) 插件(plugins) 入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始,webpack 会找出有哪些模块和 library 是入口起点(直接和间接)依赖的。
1642 0
|
Web App开发 JavaScript 前端开发