当前位置:首页 > 科技  > 软件

如何使用Rollup开发一个npm包并发布

来源: 责编: 时间:2024-05-09 17:56:25 98观看
导读背景前几天老大说现在团队中很多冗余代码,而其中一部分就表现在,很多项目都重复写了一些一模一样的工具函数,比如:公司内部加密函数公司内部的权限校验函数公司内部的单点登录封装函数等等。。。。其实这些函数在每一个项

背景

前几天老大说现在团队中很多冗余代码,而其中一部分就表现在,很多项目都重复写了一些一模一样的工具函数,比如:To628资讯网——每日最新资讯28at.com

  • 公司内部加密函数
  • 公司内部的权限校验函数
  • 公司内部的单点登录封装函数
  • 等等。。。。

其实这些函数在每一个项目中都是一模一样的,没必要每一个项目都写一遍,这种做法有很多坏处To628资讯网——每日最新资讯28at.com

  • 代码冗余
  • 不好维护,函数一改,就所有项目都需要一起改

由于我们公司项目不是采用 Monorepo 的方式去管理的,所以现阶段比较好的办法就是写一个工具库包,发布到私有 npm 仓库上,然后在每一个项目中去安装使用即可~ 这样好处有To628资讯网——每日最新资讯28at.com

  • 减少了每个项目中的代码冗余
  • 好维护,逻辑只需要改一处,然后改版本号重新发包即可

类比

在日常的开发中,我们会使用到很多很多的包,比如我们想要使用 lodash 只需要在终端里输入To628资讯网——每日最新资讯28at.com

npm i lodash -D

然后我们就会在 node_modules中看到这个包,并且可以去使用它~To628资讯网——每日最新资讯28at.com

图片图片To628资讯网——每日最新资讯28at.com

import { cloneDeep } from 'lodash'const obj1 = {};const obj2 = cloneDeep(obj1)

这些包长啥样?

我们打开 node_modules 中的 lodash 发现,里面其实都是打包后的产物,也就是开发 lodash 的开发者,编写一些例如 ts、ES6 语法的代码后,进行 打包后 发布到 npm 上,我们才可以通过 npm i lodash 去安装它~To628资讯网——每日最新资讯28at.com

图片图片To628资讯网——每日最新资讯28at.com

那为啥要 打包后 才发布到 npm 上呢?这是因为To628资讯网——每日最新资讯28at.com

  • 需要把 ts、ES6 这些比较新语法转换成 ES5 的旧语法
  • 需要对代码进行压缩后再发布,这样体积会比较小一些

Webpack or Rollup?

大部分的前端开发者接触到的打包工具都是 Webpack,而很少接触到 Rollup,我可以给大家简单讲讲这两者有什么区别~To628资讯网——每日最新资讯28at.com

Webpack

Webpack主要用于构建复杂的前端项目。他能做以下这些事情:To628资讯网——每日最新资讯28at.com

  • 支持将多种资源(如JavaScript、CSS、图片等)视为模块,并通过模块依赖关系进行打包
  • 提供了丰富的插件和加载器,能够处理各种复杂的场景,如代码分割、懒加载、热模块替换等
  • 它还支持开发环境和生产环境的不同配置,使得项目开发和部署更加方便

由于 Webpack 的灵活性和丰富的功能,它适用于大型、复杂的项目,特别是那些包含大量模块和资源、有复杂构建需求的项目To628资讯网——每日最新资讯28at.com

Rollup

Rollup是一个面向现代JavaScript应用的模块打包工具,专注于创建用于库和类似库的打包。具备以下这些特点:To628资讯网——每日最新资讯28at.com

  • 采用ES模块作为标准,可以按需引入和打包代码,并且能够进行 Tree Shaking,去除未使用的代码,减小输出文件大小
  • 相对于 Webpack,Rollup 更加轻量级和简单,它不提供像Webpack那样丰富的插件和加载器生态系统,但它的输出更精简

小结

  • Webpack 适合用在项目中
  • Rollup 适用于开发一些工具库、组件库

所以我们开发工具库是推荐使用 Rollup 来开发To628资讯网——每日最新资讯28at.com

开发自己的工具库

初始项目

首先新建一个 npm-sx-test 的文件夹,用来开发我们的工具库To628资讯网——每日最新资讯28at.com

名字可以自己定~To628资讯网——每日最新资讯28at.com

然后进入到 npm-sx-test 中,运行To628资讯网——每日最新资讯28at.com

npm init

初始化一个 npm 的环境~To628资讯网——每日最新资讯28at.com

{     name: 'npm-sx-test', // 包名     main: 'index.js', // 包被引入时的入口文件     type: "module", // 代码可以使用 ES6 模块化    version: 1.0.0, // 版本     description: '', // 描述     author: 'zh', // 作者     contributors: '', // 其他贡献者     dependencies: {}, // 生产依赖     devDependencies: {}, // 开发依赖     repository:'', // 源码地址     keywords: [], // 包搜索关键字  }

接着在根目录下,创建一个入口文件 index.js 以及一个 utils 文件夹To628资讯网——每日最新资讯28at.com

  • index.js 用来统一导出所有工具函数
  • utils 用来存放各种工具函数

图片图片To628资讯网——每日最新资讯28at.com

// permission.jsexport const checkPermission = (role) => {  // coding...  return role}// crypto.jsexport const crypto = (password) => {  // coding...  return password}// sso.jsexport const sso = (username) => {  // coding...  return username}// index.jsimport { crypto } from './utils/crypto'import { checkPermission } from './utils/permission'import { sso } from './utils/sso'export default {  crypto,  checkPermission,  sso}

配置 Rollup & Babel 打包环境

代码写完后,我们需要将他们打包,还记得我们上面说了为啥要打包后再发布?To628资讯网——每日最新资讯28at.com

  • 1、需要把 ts、ES6 这些比较新语法转换成 ES5 的旧语法
  • 2、需要对代码进行压缩后再发布,这样体积会比较小一些

我们需要先安装这些必要的插件To628资讯网——每日最新资讯28at.com

npm i @babel/preset-env      @rollup/plugin-babel      rollup

接着创建一个 rollup.config.js 用来存放 Rollup 打包的配置To628资讯网——每日最新资讯28at.com

// rollup.config.jsimport babel from '@rollup/plugin-babel';export default {   input: 'index.js', // 入口文件  output: [    {      file: './es/index.js',      format: 'esm',  // 将软件包保存为 ES 模块文件      name: 'cssModuleVue'    },    {      file: './dist/index.js',      format: 'cjs',  // CommonJS,适用于 Node 和 Browserify/Webpack      name: 'cssModuleVue',      exports: 'default'    }  ],  watch: {  // 配置监听处理    exclude: 'node_modules/**'  },  plugins: [    // 使用插件 @rollup/plugin-babel    babel({      babelHelpers: 'bundled',      exclude: 'node_modules/**'    })  ]};

然后新建一个 babel.config.js 用来配置 Babel ,它可以帮我们把一些高级语法转成低级语法To628资讯网——每日最新资讯28at.com

// babel.config.js{  "presets": [    [      "@babel/preset-env",      {        "modules": false      }    ]  ]}

配置打包命令

现在我们可以配置打包命令了,在 package.json 中,配置命令To628资讯网——每日最新资讯28at.com

"scripts": {    "build": "rollup -c",         "serve": "rollup -c -w"  }
  • -c:代表读取配置去打包,默认读取根目录下的babel.config.js
  • -w:代表了 watch 监听,调试的时候可以用~

运行 npm run build 之后,我们可以看到打包成两个版本To628资讯网——每日最新资讯28at.com

  • dist:产物是 Commonjs 模块化
  • es:产物是 ES6 模块化

图片图片To628资讯网——每日最新资讯28at.com

图片图片To628资讯网——每日最新资讯28at.com

发布 NPM 包

首先我们需要把 NPM 的源设置成你想要的,一般都是设置为公司的私有仓库地址,但是这里我设置为公共仓库~To628资讯网——每日最新资讯28at.com

npm config set registry https://registry.npmjs.org/

接着我们需要登录 NPM ,进行身份认证~To628资讯网——每日最新资讯28at.com

npm login

需要填写这些信息To628资讯网——每日最新资讯28at.com

  • username:npm 的用户名
  • password:npm 的密码
  • email:npm 注册的邮箱
  • one-time password:邮箱接收的验证码

图片图片To628资讯网——每日最新资讯28at.com

最后修改一下 package.json里To628资讯网——每日最新资讯28at.com

加上 "main": "dist/index.js", 加上 "module": "es/index.js"  加上 "files": [    "es/*",    "dist/*"  ],
  • 修改 main 是为了我们使用这个包时引用到 dist 里的文件
  • 修改 files 是为了推送 npm 只推送所需要的文件上去就行

然后运行 npm publish,就会将打包后的产物推送到 npm 上了~To628资讯网——每日最新资讯28at.com

图片图片To628资讯网——每日最新资讯28at.com

使用函数库

现在回到各个项目中,只需要To628资讯网——每日最新资讯28at.com

npm i npm-sx-test

就可以使用我们自己的组件库啦~To628资讯网——每日最新资讯28at.com

import { checkPermission } from 'npm-sx-test'console.log(checkPermission('admin'))

To628资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-87679-0.html如何使用Rollup开发一个npm包并发布

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Container包中的那些容器,你知道几个?

下一篇: 一篇聊透云原生中的服务网格

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • 十个可以手动编写的 JavaScript 数组 API

    十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 这款新兴工具平台,让你的电脑效率翻倍

    这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 品牌洞察丨服务本地,美团直播成效几何?

    品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top
Baidu
map