如何使用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 相关文章推荐
js小技巧--自动隐藏红叉叉
Aug 13 Javascript
来自qq的javascript面试题
Jul 24 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
js判断滚动条是否已到页面最底部或顶部实例
Nov 20 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
基于javascript实现根据身份证号码识别性别和年龄
Jan 22 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 Javascript
如何利用模板将HTML从JavaScript中抽离
Oct 08 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
swiper 解决动态加载数据滑动失效的问题
Feb 26 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 03 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实现的下载css文件中的图片的代码
2010/02/08 PHP
php全排列递归算法代码
2012/10/09 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
JavaScript静态的动态
2006/09/18 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
js实现计算器功能
2020/08/10 Javascript
Python实现文件内容批量追加的方法示例
2017/08/29 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
总经理秘书工作职责
2013/12/26 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
前处理班长职位说明书
2014/03/01 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL