image.png
image.png
image.png

模块解析

image.png

(解析)加载本地模块

  1. const add = (x, y) => {
  2. return x + y;
  3. };
  4. // 通过commonjs导出的对象,在引入时也需要通过commonjs引入
  5. module.exports = {
  6. add,
  7. };
  1. const math = require("./math.js");
  2. console.log(math.add(1, 2));

打包后运行打包后文件,得到结果
image.png

(解析)加载第三方模块

在项目更目录下安装一个loadsh:
npm i loadsh -D

  1. // 导入第三方包
  2. import _ from "loadsh";
  3. // 导入自定义包
  4. const math = require("./math.js");
  5. console.log(math.add(1, 2));
  6. console.log(_.join(["hello", "webpack"], " "));

结果
image.png

解析绝对路径下的包

  1. // 导入第三方包
  2. import _ from "loadsh";
  3. // 导入自定义包
  4. // 解析src下的math.js文件
  5. const math = require("/src/math.js");
  6. console.log(math.add(1, 2));
  7. console.log(_.join(["hello", "webpack"], " "));

解析相对路径下的包

  1. // 导入第三方包
  2. import _ from "loadsh";
  3. // 导入自定义包
  4. // 解析相对路径下的math.js文件
  5. const math = require("./math.js");
  6. console.log(math.add(1, 2));
  7. console.log(_.join(["hello", "webpack"], " "));

解析模块路径

  1. // 导入第三方包
  2. // 解析模块路径,直接写模块名就可以找到对应的模块
  3. import _ from "loadsh";
  4. // 导入自定义包
  5. const math = require("./math.js");
  6. console.log(math.add(1, 2));
  7. console.log(_.join(["hello", "webpack"], " "));

别名

  1. const path = require("path");
  2. module.exports = {
  3. mode: "development",
  4. entry: "./src/app.js",
  5. resolve: {
  6. alias: {
  7. // @ 就是代表了./src这一个路径,例如:
  8. // @/a 就是 ./src/a
  9. "@": path.resolve(__dirname, "./src"),
  10. },
  11. },
  12. };

隐藏扩展名

在vue中,引入文件时可以省略文件的扩展名
当一个文件下有同名(math)的文件,但扩展名不同时。
那么在引入(math)文件时,会默认优先引入js文件内容
这个可以通过extensions配置,r如下:

  1. const path = require("path");
  2. module.exports = {
  3. mode: "development",
  4. entry: "./src/app.js",
  5. resolve: {
  6. alias: {
  7. "@": path.resolve(__dirname, "./src"),
  8. },
  9. // 配置后会有优先使用json文件
  10. extensions: [".json",".js",".vue"]
  11. },
  12. };

外部扩展

将一些第三方库以cdn的方式引入
image.png

  1. // 导入第三方包
  2. import $ from "jquery";
  3. console.log($);
  4. // 这时时无法使用的,需要在webpack中配置相关信息才行
  1. const path = require("path");
  2. const HtmlWebpackPlugin = require("html-webpack-plugin");
  3. module.exports = {
  4. mode: "development",
  5. entry: "./src/app.js",
  6. plugins: [new HtmlWebpackPlugin({ template: "./index.html" })],
  7. externals: {
  8. // 这里的key值,将会成为引用时使用的值
  9. jquery: "jQuery",
  10. },
  11. };

需要在模板中引入jquery才能实现:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. <!-- 导入jquerycnd链接 -->
  9. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
  10. </head>
  11. <body></body>
  12. </html>

运行结果:已经可以将jquery的相关信息打印(可以使用jquery了)
image.png
jquery的cdn链接在中查找,如下:
image.png

自动导入第三方库

  1. const path = require("path");
  2. const HtmlWebpackPlugin = require("html-webpack-plugin");
  3. module.exports = {
  4. mode: "development",
  5. entry: "./src/app.js",
  6. // 又因为是自动的,所以不需要配置模板,同时也不需要在模板中导入jquery的cdn链接
  7. plugins: [new HtmlWebpackPlugin()],
  8. // externalsType用于告诉浏览器,externals中配置的链接通过什么标签展示
  9. // 如下为,通过script标签展示
  10. externalsType:"script",
  11. externals: {
  12. jquery: [
  13. "https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js",
  14. // "jQuery" 等同于"$"
  15. "$"
  16. ],
  17. },
  18. };

配置好后,就可以直接打包运行,这时的jquery会自动导入到打包后的文件中,
image.png

依赖图

image.png

  1. // 异步载入模块
  2. import(/* webpackChunkName: 'lodash' */ "lodash")
  3. // 起别名
  4. .then(({ default: _ }) => {
  5. console.log(_.join(["hello", "world"], " "));
  6. });
  1. // 导入第三方包
  2. import math from "./math.js";
  3. console.log(math.add(5, 6));
  4. // 这时时无法使用的,需要在webpack中配置相关信息才行
  1. const add = (x, y) => {
  2. return x + y;
  3. };
  4. // 通过commonjs导出的对象,在引入时也需要通过commonjs引入
  5. module.exports = {
  6. add,
  7. };
  1. const path = require("path");
  2. const HtmlWebpackPlugin = require("html-webpack-plugin");
  3. module.exports = {
  4. mode: "development",
  5. // 配置多入口
  6. entry: {
  7. app: "./src/app.js",
  8. app2: "./src/app2.js",
  9. },
  10. plugins: [new HtmlWebpackPlugin()],
  11. externalsType: "script",
  12. };

这时的打包结果:
image.png
项目目录:
image.png

查看依赖关系

安装:npm i webpack-bundle-analyzer -D
导入插件

  1. const path = require("path");
  2. const HtmlWebpackPlugin = require("html-webpack-plugin");
  3. const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
  4. module.exports = {
  5. mode: "development",
  6. // 配置多入口
  7. entry: {
  8. app: "./src/app.js",
  9. app2: "./src/app2.js",
  10. },
  11. plugins: [new HtmlWebpackPlugin(), new BundleAnalyzerPlugin()],
  12. externalsType: "script",
  13. };

打包运行后的效果图:
image.png