当前位置: 首页 > news >正文

webpack学习-7.创建库

webpack学习-7.创建库

  • 1.暴露库
    • 1.1概念
    • 1.2验证
      • 1.2.1 不导出方法
      • 1.2.2 导出方法
  • 2.外部化 lodash
  • 3.外部化的限制
  • 4.最终步骤
  • 5.使用自己的库
    • 5.1坑
  • 6.总结

1.暴露库

这个模块学习有点坑。看名字就是把自己写的个包传到npm,而且还要在项目中使用到它,支持各种语法。处处是坑。
把自己的库传到npm也还简单,但你要保证自己传的包自己下载了能用。先说说创建库吧。
根据官网的步骤,记录几点重要的。

1.1概念

直接从暴露库开始,官网基本就说了一句暴露库

一切都应该与打包应用程序一样,但是打包库有一个不同的地方——需要通过 output.library 配置项暴露从入口起点导出的内容。

暴露库是干嘛的呢?懵

output.library 配置项用于在打包库时,指定从入口起点导出的内容在全局环境中的命名方式和暴露方式。当你将代码打包成库(Library)时,你可能希望将某些功能或对象暴露给外部使用。这样,其他开发者可以在他们的项目中引入你的库,并使用你所暴露的功能。在打包过程中,output.library 配置项允许你指定库的名称,这样它就可以在全局环境中访问。通过将 output.library 设置为一个字符串,你可以为你的库指定一个全局变量名。举个例子,假设你的库名为 MyLibrary,你可以这样配置 output.library:javascript
复制
output: {// ...library: 'MyLibrary'
}
这将使得你的库在打包后可以通过全局变量 MyLibrary 进行访问。如果你希望将库的某个特定导出作为全局变量暴露,而不是整个库对象,你可以使用 output.libraryExport 配置项。例如,假设你的库的入口文件导出了一个函数 myFunction,你可以这样配置 output.libraryExport:javascript
复制
output: {// ...library: 'MyLibrary',libraryExport: 'myFunction'
}
这将使得你的库在打包后,只有 myFunction 函数被暴露为全局变量 MyLibrary。通过使用 output.library 和 output.libraryExport 配置项,你可以控制打包后库在全局环境中的访问方式和暴露的内容,以满足你的特定需求。

意思就是暴露后的话,你的库就能被这样那样的调用了

在 CommonJS 模块中导入:const webpackNumbers = require('webpack-numbers');
// ……
webpackNumbers.wordToNum('Two');AMD 模块中导入:require(['webpackNumbers'], function (webpackNumbers) {// ……webpackNumbers.wordToNum('Two');
});
使用脚本标签:<!DOCTYPE html>
<html>...<script src="https://example.org/webpack-numbers.js"></script><script>// ……// 全局变量webpackNumbers.wordToNum('Five');// 属性处于 window 对象中window.webpackNumbers.wordToNum('Five');// ……</script>
</html>

1.2验证

直接用脚本标签来验证:
在这里插入图片描述
确保引入的js文件是打包后的js文件目录。

1.2.1 不导出方法

在这里插入图片描述
结果:
在这里插入图片描述

1.2.2 导出方法

在这里插入图片描述
结果:
在这里插入图片描述
这里的结果就有点出乎意料了!!!说明方法只有numToWord导出来了的,webpackNumbers就是导出来的numToWord方法了,没有wordYoNum方法了。

2.外部化 lodash

现在,如果执行 webpack,你会发现创建了一个体积相当大的文件。查看文件可以发现 lodash 也被打包到代码中。在这种场景中,我们更倾向于把 lodash 当作 peerDependency,即使用者应该已经自行安装过 lodash,这样便可以放弃控制此外部库,将控制权让给使用此库的开发者。也就是我们自己的库应该是可以依赖人家的库,但是打包的时候应该不把人家的库一起打包。
添加配置:

   externals: {lodash: {commonjs: 'lodash',commonjs2: 'lodash',amd: 'lodash',root: '_',},},

上面的配置意味着这个库需要一个名为 lodash 的依赖,这个依赖在开发者环境中必须存在且可用。

3.外部化的限制

这个其实就是对上面外部化 lodash的拓展,如果上面的还引入了其他的包呢,应该不能打包在代码里的。所以需要将externals变为数组

externals: ['library/one','library/two',// 匹配以 "library/" 开始的所有依赖/^library\/.+$/,],

就可以实现把多个导入的模块不打包到代码里。

4.最终步骤

遵循 生产环境 指南中提到的步骤优化生产环境下的输出结果。那么此时还需要生成 bundle 的文件路径,并将其添加到 package.json 中的 main 字段中。

package.json

{..."main": "dist/webpack-numbers.js",...
}

或者也可以按照这个 指南 将其添加为标准模块:

{..."module": "src/index.js",...
}

解释一下:

{
“name”: “my-package”,
“version”: “0.1.0”,
“main”: “dist/my-package.js”
}
当您调用应用程序或库时,这会指示 Browserify 或 Webpack 或[在此处插入模块捆绑程序] 将其内容dist/my-package.js以及它所具有的任何依赖项包含在您的捆绑包中。require(‘my-package’)
但对于像 Rollup 这样支持 ES2015 的工具,使用 CommonJS(或通用模块定义)构建并不理想,因为我们无法利用 ES2015 模块功能。因此,假设您已将包编写为 ES2015 模块,则可以在CommonJS/UMD 构建旁边生成 ES2015 模块构建:
{
“name”: “my-package”,
“version”: “0.1.0”,
“main”: “dist/my-package.umd.js”,
“module”: “dist/my-package.esm.js”
}

现在便可以 将其发布为一个 npm 包,步骤可以看看这里

5.使用自己的库

上面验证用的是脚本标签,想着是简单一点的。但是肯定要人家能要到才行。脚本标签是在自己本地的,当然如果你部署在自己服务器下倒是没问题的(我不会哈)。我们用通常npm的那些库的方式使用下自己的包呢。

npm i 自己的库名

在这里插入图片描述
结果:
在这里插入图片描述
完美!

5.1坑

如果你报错了的话:
在这里插入图片描述
看看你的配置文件是不是还有:
在这里插入图片描述
externals不能有!

6.总结

1.output.library和output.libraryExport,暴露库和方法
2.externals控制外来的包不打包到代码
3.package.json的main和modules字段

相关文章:

webpack学习-7.创建库

webpack学习-7.创建库 1.暴露库1.1概念1.2验证1.2.1 不导出方法1.2.2 导出方法 2.外部化 lodash3.外部化的限制4.最终步骤5.使用自己的库5.1坑 6.总结 1.暴露库 这个模块学习有点坑。看名字就是把自己写的个包传到npm&#xff0c;而且还要在项目中使用到它&#xff0c;支持各种…...

MQTT - 笔记

1 Mosquitto 官网 https://mosquitto.org/ 2 Windows环境下安装配置Mosquitto服务及入门操作介绍 Windows环境下安装配置Mosquitto服务及入门操作介绍-CSDN博客 3 开源:MQTT安装与配置使用 【C++】开源:MQTT安装与配置使用_c++ mqtt-CSDN博客 4 一文搞懂Qt-MQTT开发...

Django 安装

各位小伙伴想要博客相关资料的话&#xff0c;关注公众号&#xff1a;chuanyeTry即可领取相关资料&#xff01; Django 安装 在安装 Django 前&#xff0c;系统需要已经安装了 Python 的开发环境。 如果你还没有安装 Python&#xff0c;请先从 Python 官网 https://www.python…...

推荐一个vscode看着比较舒服的主题:Dark High Contrast

主题名称&#xff1a;Dark High Contrast &#xff08;意思就是&#xff0c;黑色的&#xff0c;高反差的&#xff09; 步骤&#xff1a;设置→Themes→Color Theme→Dark High Contrast 效果如下&#xff1a; 感觉这个颜色的看起来比较舒服。...

YCSB 测试表预分区

最近使用 YCSB 测试时&#xff0c;一直使用如下方法创建预分区&#xff1a; TABLE_NAME"usertable" REGIN_SPLITS$((510-1)) cat << EOF | sudo -u hbase hbase shell create ${TABLE_NAME}, cf, {SPLITS > (1..${REGIN_SPLITS}).map {|i| "user#{100…...

K8s 教程

一文让你全面了解K8s(Kubernetes) - 知乎 Install and Set Up kubectl on Linux | Kubernetes阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 留存一份地址...

python:改进型鳟海鞘算法(SSALEO)求解23个基本函数

一、改进型鳟海鞘算法SSALEO 改进型鳟海鞘算法&#xff08;SSALEO&#xff09;由Mohammed Qaraad等人于2022年提出。 参考文献&#xff1a;M. Qaraad, S. Amjad, N. K. Hussein, S. Mirjalili, N. B. Halima and M. A. Elhosseini, "Comparing SSALEO as a Scalable Larg…...

Hive-数据模型详解(超详细)

文章目录 一、Hive数据模型1. 概述2. 数据库和表(1) 创建数据库(2) 使用数据库(3) 创建表格(4) 查看表结构 3. 分区与桶(1) 分区(2) 桶 4. 数据加载与查询(1) 数据导入(2) 查询语句 5. 总结 一、Hive数据模型 1. 概述 Hive是基于Hadoop的数据仓库工具&#xff0c;它提供了类似…...

docker的常规使用总结

不安装docker下载镜像&#xff0c;或者下载异构镜像&#xff0c;模拟docker客户端 https://pull.7ii.win/ 1、启动docker服务 systemctl start docker 设置开机自启 systemctl enable docker 2、查看镜像 docker images --查看下载镜像架构 docker inspect 镜像名字 |…...

CSS 文字弹跳效果

鼠标移过去 会加快速度 <template><div class"bounce"><p class"text" :style"{animationDuration: animationDuration}">欢迎使用UniApp Vue3&#xff01;</p></div> </template><script> export d…...

什么是动态IP?静态IP和动态IP有什么区别?

动态IP(Dynamic IP)和静态IP(Static IP)它是指在计算机网络中分配给设备的两种不同类型的IP地址。 动态IP是指每次设备连接到网络时&#xff0c;网络服务提供商(ISP)IP地址的动态分配。当设备重新连接到网络时&#xff0c;它可能会被分配到不同的IP地址。动态IP适用于传统的家…...

Linux 与 Shell

Linux系统的四部分&#xff1a;Linux系统的核心是内核。内核主要负责四种功能&#xff1a; 系统内存管理 操作系统内核的主要功能之一&#xff1a;内存管理。&#xff08;物理内存 虚拟内存&#xff09;内核通过硬盘上称为交换空间&#xff08;swap space&#xff09;的存储区…...

大数据-Hive练习-环比增长率、同比增长率、复合增长率

目录 &#x1f959;12.1 环比增长率 1. 概述 2. 公式 3. 示例 4.练习-需求:计算各类商品的月环比增长率 &#x1f959;12.2 同比增长率 1. 概述 2. 公式 3. 示例 4. 练习-需求:计算各类商品的月同比增长率 &#x1f959;12.3 复合增长率 1. 概述 2. 公式 3. 示例…...

C++ 考前难点总结

前言 后天考c&#xff0c;但这几天得甲流了&#xff0c;特别难受&#xff01;复习c的时候复习着忘着&#xff0c;所以用csdn记录一下不熟悉的知识点&#xff0c;等后天考前再看一遍&#xff01; 函数模板 #include <iostream>// 定义一个模板类 template <class T1…...

ARM 汇编语言知识积累

博文参考&#xff1a; arm中SP&#xff0c;LR&#xff0c;PC寄存器以及其它所有寄存器以及处理器运行模式介绍 arm平台根据栈进行backtrace的方法-腾讯云开发者社区-腾讯云 (tencent.com) 特殊功能寄存器&#xff1a; SP&#xff1a; 即 R13&#xff0c;栈指针&#xff0c;…...

k8s面试之——简述网络模型

kubernetes网络模型是kubernetes集群中管理容器网络通信的一种机制&#xff0c;用于实现pod间、pod与外部网络间的通信和互联&#xff0c;并提供了多种网络插件和配置选项来满足不同应用场景下的需求。kubernetes网络模型可以分为一下几个部分&#xff1a; 1. pod网络模型 在…...

C语言中关于if else的理解

if else我们可以理解为 if(条件1) //如果条件1成立 语句1&#xff1b; //执行语句1 else //如果条件1不成立 语句2; //执行语句2 这是一个经典的if els…...

Keil5软件仿真 定时器互补通道 波形输出(Logic Analyzer)

步骤一&#xff1a;管脚配置确认。 ①配置定时器的管脚模式为复用推挽输出模式&#xff08;GPIO_MODE_AF_PP&#xff09;&#xff01;&#xff01;&#xff01;&#xff0c;注意&#xff1a;复用开漏模式软件仿真时无波形。 步骤二&#xff1a;编译程序。 ①点击编译按钮。 …...

华纳云:怎么实现Linux主机ssh无密码登录

实现Linux主机之间的SSH无密码登录可以通过使用SSH密钥对。以下是简单的步骤&#xff1a; 步骤 1: 生成SSH密钥对 打开终端&#xff0c;并在本地计算机上执行以下命令&#xff1a; ssh-keygen -t rsa 此命令将生成一对SSH密钥(公钥和私钥)。您可以选择在生成密钥时设置密码&…...

模型树实操

很多时候&#xff0c;数据都是有层级和分类的&#xff0c;使用laravel的Dcat框架&#xff0c;可以快速搭建一个结构清晰、且可以鼠标拖拽排序的后台&#xff1b;先上例子更直观&#xff1a; 这里是Dcat的模型树使用文档&#xff0c;戳一下&#xff1b; 重点注意事项有&#x…...

Agent解析复杂PDF表格时效果极差,如何自动化处理?

斯坦福大学教授、AI领域顶尖学者吴恩达近日明确表示&#xff1a;不会有AI就业末日。在他看来&#xff0c;AI会影响岗位、改变技能要求、也会替代一部分任务&#xff0c;但将其描绘成大规模失业灾难&#xff0c;“是在制造不必要的恐惧&#xff0c;也是不负责任的”。与其担忧被…...

ATxmega时钟与GPIO配置详解:从原理到实战调试

1. 项目概述&#xff1a;从零认识ATxmage的时钟与GPIO最近在捣鼓一块ATxmage的开发板&#xff0c;很多刚入门的朋友拿到手&#xff0c;面对密密麻麻的引脚和一堆陌生的寄存器&#xff0c;往往不知道从哪里下手。其实&#xff0c;玩转任何一款微控制器&#xff0c;最核心、最基础…...

C++二叉树构建、深拷贝与可视化输出实战解析

1. 项目概述&#xff1a;从零构建与复制二叉树在C的日常开发中&#xff0c;尤其是涉及到算法、数据结构或者需要处理层次化数据的场景&#xff0c;二叉树是一个绕不开的基础结构。最近我在重构一个旧的项目模块&#xff0c;其中核心需求就是需要动态生成一个数据结构&#xff0…...

国产电池包传感监测芯片:从AFE设计到BMS系统实战解析

1. 项目概述&#xff1a;从“芯”守护&#xff0c;让每一度电都安全在电动汽车的心脏——动力电池包里&#xff0c;温度、电压、电流这些关键参数哪怕出现一丝一毫的异常&#xff0c;都可能从量变引发质变&#xff0c;最终导致热失控等严重安全事故。因此&#xff0c;对电池包内…...

LTM4644国产替代-ITE4644

ITE4644是四路DC/DC降压模块稳压器&#xff0c;每路可以输出4A。输出可以并联在一个阵列中&#xff0c;最高可达16A的能力。封装内包含开关控制器&#xff0c;功率场效应管&#xff0c;电感器和支持组件。工作在输入电压范围4V~14V或者2.375V~14V(INTVCC/SVIN外置偏置电压)。 I…...

STM32单片机引脚功能详解——从GPIO到AFIO的标准库配置指南(硬件总结四)

前言 在STM32的开发中&#xff0c;引脚是MCU与外部电路交互的物理桥梁。STM32F103C8T6这款经典的Cortex-M3单片机在LQFP48封装下仅有48个引脚&#xff0c;却能支持GPIO、ADC、USART、SPI、I2C、定时器、USB等多种外设功能——这得益于其灵活的多功能引脚复用机制。深入理解引脚…...

风云三国2.4问鼎天下:不靠作弊代码,用TXT文件修改实现俘虏名将和强制投降

风云三国2.4问鼎天下&#xff1a;TXT文件修改实现俘虏名将与强制投降的硬核技巧 在《风云三国2.4问鼎天下》这款经典MOD中&#xff0c;许多玩家都渴望能够招降那些赫赫有名的武将&#xff0c;比如关羽、诸葛亮等&#xff0c;但游戏机制往往让这些名将难以归顺。传统的作弊代码虽…...

从STM32转战合泰HT32F52352:手把手教你用GPTM定时器搞定四路舵机PWM控制

从STM32到HT32F52352的平滑迁移&#xff1a;GPTM定时器实现四路舵机PWM控制实战 对于习惯了STM32生态的开发者而言&#xff0c;初次接触合泰HT32系列MCU时往往面临两个挑战&#xff1a;如何快速理解新芯片的架构设计&#xff0c;以及如何将已有的STM32开发经验有效迁移。HT32F…...

Midjourney团队协作功能深度解析(仅限Beta内测成员验证的7层工作流架构)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Midjourney团队协作功能的演进逻辑与Beta内测准入机制 Midjourney自V5.2起将协作能力从“单用户提示工程”转向“多角色协同创作范式”&#xff0c;其核心演进逻辑围绕权限粒度、上下文继承性与资产归属治理三…...

SQL-lab通关教程

Less-1单引号型完整注入流程打开靶场第一关你会看到如下图所示界面&#xff0c;由为方便后续靶场的payload输入查看&#xff0c;我这里了将直接利用hackbar进行sql注入测试。第1步&#xff1a;确认闭合方式payload&#xff1a;http://127.0.0.1:8080/Less-1/?id1分析&#xff…...