前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5-1 library 的打包

5-1 library 的打包

作者头像
love丁酥酥
发布2020-04-23 15:31:50
6030
发布2020-04-23 15:31:50
举报

1. 简介

我们开发一个库,供别人使用 npm 下载使用时,为了保证兼容性和体积,应该将其打包。本节介绍如何打包一个库进行发布。

2. 初始化项目

首先,我们新建一个目录,叫 library-demo,进入该目录,运行命令:

npm init -y

这样我们就初始化了一个项目,并为其自动创建了一个 package.json 如下:

{
  "name": "library-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

这个package.json 很简单,介绍了一些项目信息,以及入口文件。

3. 实现库逻辑

我们实现以下库逻辑,新建目录 src, 然后在其下新建三个文件:

// math.js
export const add = (a, b) => a + b;
export const minus = (a, b) => a - b;
// string.js
export const join = (a, b) => a + ' ' + b;
// index.js
import * as math from './math';
import * as string from './string';

export default {
  math,
  string
}

4. 使用 webpack 进行打包

首先,安装 webpack,如下:

npm i webpack webpack-cli -D

然后新建一个配置文件:

// webpack.config.js
const path = require('path');

module.exports= {
  mode: 'production',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'library-demo.js'
  }
};

修改 package.json 如下部分:

  "main": "dist/index.js",
  "scripts": {
    "build": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

然后运行打包命令如下:

npm run build

image.png

5. umd

库文件打包后,使用者在引入时,可能有多种方法,比如 amd,cmd,commonjs,甚至是直接使用 script 引入。所以我们可以将库导出为一个 umd 模块,支持以上所有的使用场景,如下:

    library: "libraryDemo", // the name of the exported library
    libraryTarget: "umd", // universal module definition

6. externals

假设我们开发的库文件中本身引用了一个三方库,如下:

// string.js
import _ from 'lodash'
export const join = (a, b) => _.join([a, b], ' ');

我们安装 loadash 后打包:

npm i lodash -S

image.png

可以看到 lodash 被打入进来,大大增加了包体,且拖慢了打包速度。lodash 这类三方库其实一般都很稳定,可以单独拿出来加载并缓存。如下:

  externals: {
    _: 'lodash'
  }

打包后,发现没有引入 lodash,包体大大减小:

image.png

用户使用的时候需要自己手动引入 lodash。

7. 发布

发布前我们首先需要注册一个 npm 账号,https://www.npmjs.com/ 然后使用 npm adduser 或者 npm login 来登录,记得在此之前将 npm 的源切换到 npm 而不是 cnpm 或者其他源,除非你本意是在其他源上进行发布。 然后 npm publish 发布即可。

参考

https://webpack.js.org/configuration/ 可能是最详细的UMD模块入门指南 JS通用模块模式 UMD 模块化之AMD、CMD、UMD、commonJS webpack 的externals配置 https://webpack.js.org/configuration/externals/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 初始化项目
  • 3. 实现库逻辑
  • 4. 使用 webpack 进行打包
  • 5. umd
  • 6. externals
  • 7. 发布
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档