如何使用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 代码也可以变得优美的实现方法
Jun 22 Javascript
javascript 显示当前系统时间代码
Dec 28 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
Jul 31 Javascript
jQuery之自动完成组件的深入解析
Jun 19 Javascript
JS不间断向上滚动效果代码
Dec 25 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
Sep 14 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
vue router仿天猫底部导航栏功能
Oct 18 Javascript
JavaScript中的 new 命令
May 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
ThinkPHP惯例配置文件详解
2014/07/14 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
namespace.js Javascript的命名空间库
2011/10/11 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
node跨域请求方法小结
2017/08/25 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
NumPy中的维度Axis详解
2019/11/26 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
自学考试自我鉴定范文
2013/09/26 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
大学生创业计划书
2014/08/14 职场文书
2014年小学工作总结
2014/11/26 职场文书
2015年三万活动总结
2015/03/25 职场文书
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技