如何使用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的函数重名看其初始化方式
Mar 08 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
JavaScript中实现sprintf、printf函数
Jan 27 Javascript
后台获取ZTREE选中节点的方法
Feb 12 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
Apr 30 Javascript
解决vue中对象属性改变视图不更新的问题
Feb 23 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
Feb 26 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
Aug 24 Javascript
three.js欧拉角和四元数的使用方法
Jul 26 Javascript
js实现鼠标点击飘爱心效果
Aug 19 Javascript
Vue组件通信$attrs、$listeners实现原理解析
Sep 03 Javascript
基于JavaScript实现省市联动效果
Jun 22 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获取ajax的headers方法与内容实例
2017/12/27 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python File(文件) 方法整理
2019/02/18 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
中国梦演讲稿5分钟
2014/08/19 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
六一晚会主持词开场白
2015/05/28 职场文书