前几天老大说现在团队中很多冗余代码,而其中一部分就表现在,很多项目都重复写了一些一模一样的工具函数,比如:
其实这些函数在每一个项目中都是一模一样的,没必要每一个项目都写一遍,这种做法有很多坏处
由于我们公司项目不是采用 Monorepo 的方式去管理的,所以现阶段比较好的办法就是写一个工具库包,发布到私有 npm 仓库上,然后在每一个项目中去安装使用即可~ 这样好处有
在日常的开发中,我们会使用到很多很多的包,比如我们想要使用 lodash 只需要在终端里输入
npm i lodash -D
然后我们就会在 node_modules中看到这个包,并且可以去使用它~
图片
import { cloneDeep } from 'lodash'const obj1 = {};const obj2 = cloneDeep(obj1)
我们打开 node_modules 中的 lodash 发现,里面其实都是打包后的产物,也就是开发 lodash 的开发者,编写一些例如 ts、ES6 语法的代码后,进行 打包后 发布到 npm 上,我们才可以通过 npm i lodash 去安装它~
图片
那为啥要 打包后 才发布到 npm 上呢?这是因为
大部分的前端开发者接触到的打包工具都是 Webpack,而很少接触到 Rollup,我可以给大家简单讲讲这两者有什么区别~
Webpack主要用于构建复杂的前端项目。他能做以下这些事情:
由于 Webpack 的灵活性和丰富的功能,它适用于大型、复杂的项目,特别是那些包含大量模块和资源、有复杂构建需求的项目
Rollup是一个面向现代JavaScript应用的模块打包工具,专注于创建用于库和类似库的打包。具备以下这些特点:
所以我们开发工具库是推荐使用 Rollup 来开发
首先新建一个 npm-sx-test 的文件夹,用来开发我们的工具库
名字可以自己定~
然后进入到 npm-sx-test 中,运行
npm init
初始化一个 npm 的环境~
{ 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 文件夹
图片
// 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}
代码写完后,我们需要将他们打包,还记得我们上面说了为啥要打包后再发布?
我们需要先安装这些必要的插件
npm i @babel/preset-env @rollup/plugin-babel rollup
接着创建一个 rollup.config.js 用来存放 Rollup 打包的配置
// 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 ,它可以帮我们把一些高级语法转成低级语法
// babel.config.js{ "presets": [ [ "@babel/preset-env", { "modules": false } ] ]}
现在我们可以配置打包命令了,在 package.json 中,配置命令
"scripts": { "build": "rollup -c", "serve": "rollup -c -w" }
运行 npm run build 之后,我们可以看到打包成两个版本
图片
图片
首先我们需要把 NPM 的源设置成你想要的,一般都是设置为公司的私有仓库地址,但是这里我设置为公共仓库~
npm config set registry https://registry.npmjs.org/
接着我们需要登录 NPM ,进行身份认证~
npm login
需要填写这些信息
图片
最后修改一下 package.json里
加上 "main": "dist/index.js", 加上 "module": "es/index.js" 加上 "files": [ "es/*", "dist/*" ],
然后运行 npm publish,就会将打包后的产物推送到 npm 上了~
图片
现在回到各个项目中,只需要
npm i npm-sx-test
就可以使用我们自己的组件库啦~
import { checkPermission } from 'npm-sx-test'console.log(checkPermission('admin'))
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-87679-0.html如何使用Rollup开发一个npm包并发布
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
下一篇: 一篇聊透云原生中的服务网格