Webpack入门,模块打包之加载其他类型的模块

在实际开发中,开发者可能遇到其他类型的模块,比如AMD、UMD模块,虽然这些模块在目前的使用场景已经不多,但是遇到这些模块时仍然需要知道如何处理。

加载非模块化的文件

非模块化文件指的是并不遵循任何一种模块标准的文件。最常见的就是引入JQuery及其各种插件。

如何使用Webpack打包这类文件呢?其实只需要直接引入即可:import './jquery.min.js';这句代码会直接执行jquery.min.js。一般来说,jQuery这类库都是将其接口绑定在全局,因此无论是从script标签引入,还是使用Webpack打包的方式引入,其最终效果是一样的。

加载AMD模块

AMD(Asynchronous Module Definition,异步模块定义)是由JavaScript社区提出的专注于支持浏览器端模块化的标准。从名字就可以看出它与CommonJS和ES6 Module最大的区别在于它加载模块的方式是异步的。

在AMD中使用define函数来定义模块,它可以接收3个参数。第一个参数是当前模块的ID【可选】,相当于模块名;第二个参数是当前模块的依赖【可选,亦可为空】;第三个参数用来描述模块的导出值,可以是函数或对象。如果是函数则导出的是函数的返回值;如果是对象则直接导出对象本身。

// example.js
define([], function () {
  return {
    sayHello: function () {
      console.log("hello world!");
    },
  };
});

和CommonJS类似,AMD也使用require函数来加载模块,只不过采用异步的形式。

define(["./example.js"], function (example) {
  example();
});

require的第一个参数指定了加载的模块,第二个参数是当加载完成后执行的回调函数。

通过AMD这种形式定义模块的好处在于其模块加载是非阻塞性的,当执行到require函数时并不会停下来去执行被加载的模块,而是继续执行require后面的代码,使得模块加载操作并不会阻塞浏览器。

尽管AMD的设计理念很好,但与同步加载的模块标准相比其语法要更加冗长。另外其异步加载的方式没有同步加载的方式清晰,并且容易造成回调地狱(callback hell)。

加载UMD模块

严格来说,UMD并不是一种模块标准,而是一组模块形式的集合。UMD的全称是Universal Module Definition,也就是通用模块标准,它的目标是使一个模块能运行在各种环境下。

(function(global,main) {
  // 根据当前环境采取不同的导出方式
  if (typeof define === 'function' && define.amd) {
    // AMD
    define(...);
  } else if (typeof exports === 'object') {
    // CommonJS
    module.exports = ...;
  } else {
    // 非模块化环境
    global.add == ...;
  }
}(this,function(){
  // 定义模块主体
  return {...}
}));

可以看出,UMD其实就是根据当前全局对象的值判断目前处于哪种模块环境,就选择适合模块环境的导出方式进行导出。

加载npm模块

与Java、C++、Python等语言相比,JavaScript是一种缺乏标准库的语言。当开发者需要解决URL处理、日期解析这类很常见的问题时,很多时候只能自己动手封装工具接口。而npm提供了这样一种方式,可以让开发者在其平台上找到由他人所开发和发布的库并安装到项目中,从而快速地解决问题。

那么如何在本地工程中加载一个外部的npm模块呢?以实际开发中最常见的lodash库为例。

  1. 首先通过命令将lodash库安装到本地工程中:npm install lodash -save
  2. 然后在全局作用域(一般是工程入口文件)引入lodash库即可:import _ from "lodash"

提示

因为lodash是工具库,在工程运行时也需用到其提供的方法,所以要将lodash库安装到运行依赖中。

示例代码仓库

https://gitee.com/zero_79152105/webpack-vblog

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/webpack-load-other-modlue.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2022年11月12日
下一篇 2022年11月14日

相关推荐

  • Webpack入门,样式预处理

    样式预处理指的是开发者在开发过程中经常会使用一些样式预编译语言,如SCSS、Less等,在项目打包过程中再将这些预编译语言转换成CSS。借助这些语言强大和便捷的特性,可以降低项目的…

    2022年11月25日
    791
  • 函数防抖与函数节流

    函数防抖 定义 触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;更直白一点就是:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,…

    2020年7月17日
    1.5K
  • 初识Spring Boot

    什么是Spring Boot Spring Boot是由Pivotal Software公司于2013年研发的全新Java开发框架。其设计目的是用来简化新Spring应用的初始搭建…

    2024年6月16日
    582
  • JAVA学习路线之夯实基础

    第一章 开发环境 JDK(Java SE Development Kit),Java标准版开发包,提供编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环…

    2020年1月14日
    1.8K
  • 如何判断一个对象为数组

    使用 instanceof 操作符 原理 instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。 使用 instanceof 判断一个对象…

    2020年7月3日
    1.3K
  • 封装JDBC工具类,连接MySQL数据库

    JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到orac…

    2022年3月31日
    946
  • windows下使用Docker Desktop安装nacos与mysql,实现互通访问

    1、命令行拉取MySQL镜像 打开命令提示符,运行以下命令安装mysql 2、运行mysql镜像,启动mysql实例 3、命令行拉取nacos镜像 4、运行nacos镜像,启动na…

    2022年10月27日
    517
  • Webpack入门,CSS Modules

    CSS Modules是近年来比较流行的一种开发模式,其理念就是把CSS模块化,让CSS也拥有模块的特点,具体如下: 使用CSS Modules时不需要额外安装模块,只要开启css…

    2022年11月28日
    1.0K
  • CSS让内容居中的方法总结

    内容水平居中  分行内元素与块级元素两种情况;其中块级元素又分定宽与不定宽两种情况; 行内元素 首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 te…

    2019年6月28日
    3.4K
  • Vue项目中实现用户登录及token验证

    在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下: 第一次登录的时候,前端调后端的登陆接口,发送用户名和密码 。 后端收到请求,验证用户名和密码,验证成功,就给…

    2019年8月8日
    5.2K