如何使用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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
Javascript alert消息换行的方法
Aug 07 Javascript
深入理解JQuery中的事件与动画
May 18 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
jquery.tableSort.js表格排序插件使用方法详解
Aug 12 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
深入理解vue中slot与slot-scope的具体使用
Jan 26 Javascript
Vue实现左右菜单联动实现代码
Aug 12 Javascript
webpack结合express实现自动刷新的方法
May 07 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 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中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
php fread函数使用方法总结
2019/05/28 PHP
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
使用javascript插入样式
2016/03/14 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
Python学习笔记之常用函数及说明
2014/05/23 Python
详解Python发送email的三种方式
2018/10/18 Python
Python文件读写常见用法总结
2019/02/22 Python
Python版中国省市经纬度
2020/02/11 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
创先争优制度
2014/01/21 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
保送生自荐信
2015/03/06 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技