如何使用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 相关文章推荐
使用JQuery和s3captche实现一个水果名字的验证
Aug 14 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
简单实现js进度条加载效果
Mar 25 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
Apr 26 Javascript
微信小程序 导入图标实现过程详解
Oct 11 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 Javascript
js实现带搜索功能的下拉框
Jan 11 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 中执行系统外部命令
2006/10/09 PHP
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
Javascript 面试题随笔
2011/03/31 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
Three.js学习之网格
2016/08/10 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
python套接字流重定向实例汇总
2016/03/03 Python
Python程序中设置HTTP代理
2016/11/06 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python爬虫请求头的使用
2020/12/01 Python
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
幼儿教育感言
2014/02/05 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
故宫英文导游词
2015/01/31 职场文书
爱心捐书倡议书
2015/04/27 职场文书
借条如何写
2015/05/26 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书