如何使用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 相关文章推荐
20行代码实现的一个CSS覆盖率测试脚本
Jul 07 Javascript
JavaScript极简入门教程(三):数组
Oct 25 Javascript
JavaScript实现的简单幂函数实例
Apr 17 Javascript
javascript清空table表格的方法
May 14 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
vue 里面使用axios 和封装的示例代码
Sep 01 Javascript
vue中element 上传功能的实现思路
Jul 06 Javascript
解决vue项目使用font-awesome,build后路径的问题
Sep 01 Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 Javascript
javascript实现简易数码时钟
Mar 30 Javascript
如何在 Vue 中使用 JSX
Feb 14 Vue.js
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 检查扩展库或函数是否可用的代码
2010/04/06 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
Python生成器以及应用实例解析
2018/02/08 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
详解python中的数据类型和控制流
2019/08/08 Python
python实现ip地址的包含关系判断
2020/02/07 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
幼儿园六一活动总结
2014/08/27 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
健康状况证明模板
2014/10/23 职场文书
小学校长个人总结
2015/03/03 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
golang为什么要统一错误处理
2022/04/03 Golang
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang