如何使用webpack打包一个库library的方法步骤


Posted in Javascript onDecember 18, 2019

日常我们开发了一个库之后,如何打包之后提供给别人使用呢?如果你不清楚,就继续看吧!!!

初始化库

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,会得到如下所示的结果:

如何使用webpack打包一个库library的方法步骤

一个简单的库便打包生成了。

注解:webpack中libraryTarget配置项可以设为umd,表示采用umd规范,如果设置为this,表示在this下挂载了一个library变量。更多用法可参考webpack官网。

引入别的库用法

假设需要引入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仓库,发布成功后,就可以让别的小伙伴使用了。当然在实际情况中,打包一个库的话,需要做的还有很多,比如tree-shaking,优化方面的东西,我也正在逐渐学习中!

参考资料

webpack output libraryTarget
webpack external

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
会自动逐行上升的文本框
Jun 30 Javascript
Firefox下提示illegal character并出现乱码的原因
Mar 25 Javascript
匹配任意字符的正则表达式写法
Apr 29 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
ie下$.getJSON出现问题的解决方法
Feb 12 Javascript
js创建对象的方式总结
Jan 10 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
electron 如何将任意资源打包的方法步骤
Apr 16 Javascript
js实现上传图片并显示图片名称
Dec 18 #Javascript
js实现多图和单图上传显示
Dec 18 #Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
Dec 18 #Javascript
微信小程序实用代码段(收藏版)
Dec 17 #Javascript
微信小程序修改数组长度的问题的解决
Dec 17 #Javascript
微信小程序利用云函数获取手机号码
Dec 17 #Javascript
ant design实现圈选功能
Dec 17 #Javascript
You might like
php桌面中心(四) 数据显示
2007/03/11 PHP
php面向对象全攻略 (九)访问类型
2009/09/30 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
通过Turtle库在Python中绘制一个鼠年福鼠
2020/02/03 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
电气技术员岗位职责
2013/11/19 职场文书
银行批评与自我批评
2014/02/10 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS