You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// main.jsimportutilsfrom'./utils';importlodashfrom'lodash';exportfunctionadd(a,b){constresult=utils.add(a,b);console.log('add result is:',result);returnresult;}// lodash求和exportfunctionsum(array){constresult=lodash.sum(array);console.log('lodash sum result is:',result);returnresult;}
Rollup基础
什么是Rollup
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。
Rollup简单使用
安装Rollup
命令行模式
我们执行help命令查看下rollup的常见命令行参数
初始化一个rollup-demo的项目
编写main.js文件
根据help命令提示,我们构建一个umd规范且命名空间为hello的文件,执行rollup命令
我们发现多了一个叫bundle.js的文件
查看bundle.js
在浏览器执行下刚刚打包的文件,验证是否符合预期
到此我们已经简单了解rollup命令打包的使用。
但是一般情况下,为了最大发挥rollup的打包功能,我们一般都不会使用命令行模式进行打包,而是通过 Node.js来运行rollup提供的JavaScript接口来进行打包构建。接下来我们将继续通过本实例了解rollup的使用。
配置方式使用
在当前项目下安装rollup,并创建一个build.js的文件,
用node运行跑build.js进行构建,我们发现打包出了跟上述命令行模式相同的bundle.js文件。
到此我们已经大致了解了如何在node下使用rollup进行构建。
rollup的插件
我们尝试新增一个utils.js文件,并在main.js中引入。
我们执行构建,发现报错了,因为utils.js是commonjs规范的代码,rollup无法识别。
我们尝试引入rollup-plugin-commonjs插件
再次执行构建,发现已成功构建。
在项目中,我们一般不会重复造轮子,往往需要引入第三方库,为此,我们也引入lodash来实现一个求和sum函数。
执行构建命令,控制台输出如下提示,虽然构建成功,但是把lodash作为外部引入
我们查看下打包出来的代码,发现lodash确实只作为一个外部引入,并未打包到生成的代码中。
上面打包出来的umd包是无法单独执行的,除非我们在项目中已有外部引入的lodash。如果我们也想把lodash也一同打包到项目中,使得我们的umd包可以单独执行呢?
那么我们就需要用到另一个插件了,rollup-plugin-node-resolve
再次执行构建,我们发现构建成功,且将lodash也打包到bundle.js中了。
到浏览器控制台执行下打包出来的代码,代码成功运行。
用Rollup构建一个简单的库
通过上述实践,我们已经掌握了rollup的基本使用,接下来,我们将进一步完善我们的项目,使得我们可以打包出一个符合生产需求的npm包。
多环境适配
一般情况下,一个npm包应该包含esm/cjs/umd三种规范,供我们在前端项目/后端项目以及浏览器外链引入。
我们调整下项目结构
由于调整了路径,我们需要调整下build.js,将打包生成的文件放在dist目录下。
上述仅打包了一个umd规范的文件,并不满足我们的需求,对项目进一步改造。
修改package.json
由于我们引入了babel,需要新增.babelrc.js文件对babel进行配置
加入eslint
一个良好的编码规范能使得我们的项目具有更好的可维护性,引入ESLint能帮助我们更好的在规范种编码。以下我们将引入阿里egg的eslint规范对我们的编码进行约束。
安装eslint与eslint-config-egg插件
编写eslint配置文件.eslintrc
新增.eslintignore,忽略无需校验的文件
加入单元测试
作为一个完善的类库项目,单元测试是必不可少的。我们将引入mocha与chai的组合构建我们的单元测试。
安装mocha与chai
新增测试文件test/index.test.js,并编写用例。
rollup-demo ├── dist │ ├── rollup-demo.cjs.js │ ├── rollup-demo.esm.js │ └── rollup-demo.umd.js ├── package-lock.json ├── package.json ├── scripts │ └── build.js ├── src │ ├── main.js │ └── utils.js └── test └── index.test.js
修改package.json,加入测试命令
我们跑下测试脚本,已经成功
使用TypeScript
采用 TypeScript,可以避免 JavaScript 动态性所带来的一些无法预料的错误信息。经过上述流程已整理出一个堪用的lib脚手架了,但是为了打造一个更完善的脚手架,我们将引入TypeScript进行升级。
安装typescript
新增tsconfig.json配置文件
新增rollup的typescript插件
修改build.js,加入typescript插件
修改.eslintrc
结语
本文通过一个简单到示例介绍了如何使用rollup进行npm包的构建,大家可以在此基础上扩展,制订一套完善的npm包脚手架,落地到自己团队中。
The text was updated successfully, but these errors were encountered: