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

如何使用webpack打包一个库library,使用webpack打包sdk.

如何使用webpack打包一个库library

如果你需要自己封装一些包给别人使用,那么可以参考以下方法

初始化库

mkdir library
cd library
npm init -y

经过以上步骤后会生成一个library文件夹,里面包含一个package.json文件。然后简单修改为如下所示:

{"name": "library","version": "1.0.0","description": "","main": "./dist/library.js","scripts": {"build": "webpack"},"keywords": [],"author": "rocky","license": "MIT"
}

简单创建几个文件

在根目录下新建src文件夹,新建一个math.js和string.js。相关文件内容如下:

// math.js
export function add(a,b){return a+b;
}export function minus(a,b){return a-b;
}export function multiply(a,b){return a*b;
}export function division(a,b){return a/b;
}
// string.js
export function join(a,b){return a+" "+b;
}

继续新建一个index.js

import * as math from "./math";
import * as string from "./string";export default {math,string}

简单安装webpack依赖

npm install webpack webpack-cli --save

安装的同时,可以创建webpack配置文件webpack.config.js,如下配置:

const path = require("path");module.exports={mode:"production",entry:"./src/index.js",output:{path:path.resolve(__dirname,"dist"),filename:"library.js",library:"library",// 在全局变量中增加一个library变量libraryTarget:"umd"}
}

安装成功后,执行打包命令

npm run build

之后会在根目录下生成一个dist文件夹,里面包含一个library.js。

如何使用呢?

如果别人要使用这个打包后的library.js的话,可能会有如下几种方式:

// es6方式
import library from "library"// commonjs方式
const library=require("library")// AMD方式
require(["library"],function(){})// script标签引入
<script src="library.js"></script>

在dist文件夹里创建一个index.html,用script引入之前打包生成的library.js。浏览器打开index.html,在控制台中输入library,会得到如下所示的结果:

  <script src="../dist/library.js"></script><script>console.log(library);</script>

2)(C:%5CUsers%5CAcer%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20230725194632458.png)]

如果不想要default这一层,在Index.js:

import * as math from "./math";
import * as string from "./string";export { math, string }

一个简单的库便打包生成了。
注解:webpack中libraryTarget配置项可以设为umd,表示采用umd规范,如果设置为this,表示在this下挂载了一个library变量。更多用法可参考

webpack官网:https://webpack.js.org/configuration/output/#outputlibrarytarget

引入别的库用法

假设需要引入lodash.安装lodash

npm install lodash --save

修改之前创建的string.js

import _ from "lodash";export function join(a,b){// return a+" "+b;return _.join([a,b]," ");
}

运行打包命令,发现打包出来的库体积变大了,因为我们引入了lodash,导致包变大。怎么办呢?修改webpack配置文件。
增加一个externals配置项:

const path =require("path");module.exports={mode:"production",entry:"./src/index.js",externals:["lodash"],// 配置不打包文件output:{path:path.resolve(__dirname,"dist"),filename:"library.js",library:"library",libraryTarget:"umd"}
}

之后打包就会发现库的体积又变小了。

以上就是一个简单打包库的过程,打包完成后,就可以使用npm相关命令将库发布到npm仓库,发布成功后,就可以让别的小伙伴使用了。也可以直接发送打包后的文件给小伙伴引入使用 !
参考链接:https://segmentfault.com/a/1190000021318631

相关文章:

如何使用webpack打包一个库library,使用webpack打包sdk.

如何使用webpack打包一个库library 如果你需要自己封装一些包给别人使用,那么可以参考以下方法 初始化库 mkdir library cd library npm init -y经过以上步骤后会生成一个library文件夹&#xff0c;里面包含一个package.json文件。然后简单修改为如下所示&#xff1a; {&qu…...

项目一:基于stm32的阿里云智慧消防监控系统

若该文为原创文章&#xff0c;转载请注明原文出处。 Hi&#xff0c;大家好&#xff0c;我是忆枫&#xff0c;今天向大家介绍一个单片机项目。 一、简介 智慧消防监控系统&#xff0c;是用于检测火灾&#xff0c;温度&#xff0c;烟雾的监控系统。以 stm32单片机为核心外加 MQ…...

【果树农药喷洒机器人】Part6:基于深度相机与分割掩膜的果树冠层体积探测方法

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

打印1到最大的n位数

目录 1.题目概述 2.题解 1.题目概述 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 1. 用返回一个整数列表来代替打印 2. n 为正整数&#xff0c;0 < n < 5 示例&#xff1a; 输入…...

设计模式行为型——状态模式

目录 状态模式的定义 状态模式的实现 状态模式角色 状态模式类图 状态模式举例 状态模式代码实现 状态模式的特点 优点 缺点 使用场景 注意事项 实际应用 在软件开发过程中&#xff0c;应用程序中的部分对象可能会根据不同的情况做出不同的行为&#xff0c;把这种对…...

ElastAlert通过飞书机器人发送报警通知

前言 公司采用ELK架构搜集业务系统的运行日志&#xff0c;以前开发人员只有在业务出现问题的时候&#xff0c;才会去kibana上进行日志搜索操作&#xff0c;每次都是被用户告知系统出问题了&#xff0c;这简直是被啪啪打脸~ 于是痛定思痛&#xff0c;决定主动出击&#xff0c;…...

恒温碗语音芯片,具备数码管驱动与温度传感算法,WT2003H-B012

近年来&#xff0c;随着科技的飞速发展&#xff0c;智能家居产品已然成为了现代生活的一部分&#xff0c;为人们的生活带来了更多的便利和舒适。在这个不断演进的领域中&#xff0c;恒温碗多功能语音芯片——WT2003H-B012成为众多厂商的首选&#xff0c;为智能家居领域注入了全…...

新能源汽车需要检测哪些项目

截至2022年底&#xff0c;中国新能源车保有量达1310万辆&#xff0c;其中纯电动汽车保有量1045万辆。为把好新能源汽车安全关&#xff0c;我国新能源汽车除了完善的强制性产品认证型式实验外&#xff0c;还建立了“车企-地方-国家”逐级上报的三级监管体系实行新能源汽车全生命…...

VR内容定制 | VR内容中控管理平台可以带来哪些价值?

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐渗透到各个领域&#xff0c;其中教育领域也不例外。通过VR技术&#xff0c;学生可以身临其境地参与到各种场景中&#xff0c;获得更加直观、生动的学习体验。为了让教师更好地进行VR教学的设计和管理&#xff0c;提高教…...

篇十八:状态模式:状态驱动的行为

篇十八&#xff1a;"状态模式&#xff1a;状态驱动的行为" 开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 另外有2本不错的关于设计模式的资料&…...

【Tomcat】(Tomcat 下载Tomcat 启动Tomcat 简单部署 基于Tomcat进行网站后端开发)

文章目录 Tomcat下载Tomcat启动Tomcat简单部署 基于Tomcat进行网站后端开发 Tomcat Tomcat 是一个 HTTP 服务器.HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式. HTTP 服务器我们可以通过 Java Socket 来实现. 而 Tomcat 就是基于 Java 实现的一个开源免费,也是…...

简单动态字符串 sds

Redis 设计了简单动态字符串&#xff08;Simple Dynamic String&#xff0c;SDS&#xff09;的结构&#xff0c;用来表示 字符串。相比于 C 语言中的字符串实现&#xff0c;SDS 这种字符串的实现方式&#xff0c;会提升字符串的操 作效率&#xff0c;并且可以用来保存二进制数据…...

“深入剖析JVM内部原理:解密Java虚拟机的奥秘“

标题&#xff1a;深入剖析JVM内部原理&#xff1a;解密Java虚拟机的奥秘 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的内部原理&#xff0c;包括其架构、内存管理、垃圾回收机制、即时编译器等关键组成部分。通过解密JVM的奥秘&#xff0c;我们将更…...

使用QT纯代码创建(查找)对话框详细步骤与代码

一、创建项目文件 打开Qt Creator->文件->新建文件或项目->选择Qt Widgets Application 为项目起名字 输入类的名字 二、 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件&#xff0c;先来分别介绍以下这些文件的作用。 Headers->finddialog.h——很显…...

4945: 二进制转十进制

4945: 二进制转十进制 时间限制: 1.000 Sec 内存限制: 128 MB 提交: 520 解决: 335 [命题人:][下载数据: 30] 提交状态报告 题目描述 将二进制数转成十进制输出 输入 一行&#xff0c;一个二进制数&#xff0c;二进制数的位数小于32位。 输出 一个十进制的整数。…...

java后端技术汇总 + 中间件 + 架构思想

1. 华为OD机考题 答案 2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09; 2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 2. 面试题 一手真实java面试题&#xff1a;2023年各大公司java面试真题汇总--…...

《机器学习系统:设计与实现》读书笔记一

最近几年一直在做算法工程的工作&#xff0c;对机器学习系统有所涉猎&#xff0c;也很感兴趣。近期发现一本开源书籍《机器学习系统&#xff1a;设计与实现》。去图书馆找了它的纸质版&#xff0c;发现内容不尽相同。在这里结合两者做一个读书笔记。本文是第一篇&#xff0c;主…...

C语言单链表OJ题(较难)

一、链表分割 牛客网链接 题目描述&#xff1a; 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 思路&#xff1a;…...

工业巡检ar沉浸式互动培训体验实现更加直观、生动的流程展示

以往的工业手工巡检效率极低&#xff0c;错误率偏高&#xff0c;漏检问题严重&#xff0c;会因为现场人员对机械设备的早期维护、操作不会&#xff0c;而影响正常交付和服务&#xff0c;智慧工业是工业智能化和信息化的重要体现&#xff0c;在巡检方面自然也要同步提升&#xf…...

【Spring】核心容器——依赖自动装配

Spring容器根据bean所依赖的资源在容器中自动查找并注入bean的过程叫做自动装配自动装配的方式 1、按类型 2、按名称&#xff08;耦合性较高&#xff09; 3、按构造方法 自动装配特点 1、自动装配用于对引用类型进行依赖注入&#xff0c;不能对简单类型进行操作 2、自动装配的…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...