如何使用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 相关文章推荐
use jscript List Installed Software
Jun 11 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
layDate日期控件使用方法详解
Nov 15 Javascript
layui上传图片到服务器的非项目目录下的方法
Sep 26 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
Dec 12 Javascript
JS函数参数的传递与同名参数实例分析
Mar 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
对盗链说再见...
2006/10/09 PHP
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
JavaScript代码实现简单计算器
2020/12/27 Javascript
python 自动提交和抓取网页
2009/07/13 Python
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python中的随机函数random的用法示例
2018/01/27 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
Python守护进程实现过程详解
2020/02/10 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
餐饮营销方案
2014/02/23 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js