前言

业务线长期的积累产生了许许多多重复性的工具方法,业务功能模块等, 我们正好可以用 rollup 构建一个 npm 私服工具包,便于后期业务使用,减少重复性的代码编写。

项目配置

babel

引入依赖

首先运行以下命令安装babel相关:

yarn add @babel/core @babel/cli @babel/preset-env -D

配置babel.config.js

module.exports = {presets: [["@babel/preset-env",{targets: "> 0.25%, not dead"}]]
};

搭配@babel/plugin-transform-runtimecore-js

yarn add core-js @babel/runtime
yarn add @babel/plugin-transform-runtime -D

修改babel.config.js如下:

module.exports = {presets: [["@babel/preset-env",{targets: "> 0.25%, not dead",useBuiltIns: "usage",corejs: "3.6.5"}]],plugins: ["@babel/plugin-transform-runtime"]
};

增加 npm scripts

"scripts:" {"babel": "babel ./src/index.js -o ./dist/index.js"
}

Typescript

面向未来,所以这里引入typescript,统一用 ts 进行开发

yarn add typescript@4.3.5 -D
yarn add @babel/preset-typescript -D

修改babel配置如下:

module.exports = {presets: [['@babel/preset-env',{targets: '> 0.25%, not dead',useBuiltIns: 'usage',corejs: '3.6.5'},'@babel/preset-typescript']],plugins: ['@babel/plugin-transform-runtime']
};

rollup

项目是纯粹的Javascript项目,没有vuereact相关的业务性代码,所以使用 rollup 进行打包。

引入依赖

yarn add rollup @rollup/plugin-babel @rollup/plugin-commonjs @rollup/plugin-node-resolve rollup-plugin-terser rollup-plugin-typescript2 tslib -D

配置rollup.config.js

import babel from '@rollup/plugin-babel'; // 引入babel
import commonjs from '@rollup/plugin-commonjs'; // 引入cjs插件
import { nodeResolve } from '@rollup/plugin-node-resolve'; // 引入resolve
import typescript from 'rollup-plugin-typescript2'; // ts
import { terser } from 'rollup-plugin-terser'; // 压缩打包文件const extensions = ['.js', '.ts'];const pkg = require('./package.json'); // 从package.json引入const version = pkg.version; // 项目版本
const license = pkg.license; // 协议
const author = pkg.author; // 作者// 打包文件的头部声明
const banner ='/*!\n' +` * ${pkg.name} v${version}\n` +` * (c) 2020-${new Date().getFullYear()} ${author}\n` +` * Released under the ${license} License.\n` +' */';module.exports = {input: 'src/index.ts',output: [// 文件输出配置{file: 'dist/index.umd.js', // 打包后生产的文件位置,及文件名format: 'umd',name: 'utools', // 包的全局变量名称banner},{file: 'dist/index.esm.js', // 打包后生产的文件位置,及文件名format: 'esm',name: 'utools', // 包的全局变量名称banner}],plugins: [nodeResolve({extensions,modulesOnly: true}),commonjs(),typescript(),babel({babelHelpers: 'runtime',include: 'src/**',exclude: 'node_modules/**',extensions}),terser()]
};

增加 npm scripts

"scripts:" {"build": "rollup -c"
}

Jest

引入依赖

正好引入单元测试,便于项目后续迭代维护

yarn add jest@27.0.2  jest-globals ts-jest@27.0.2 @types/jest babel-jest@27.0.2 -D

配置jest.config.js

module.exports = {preset: 'ts-jest',testEnvironment: 'node',transform: {'^.+\\.jsx?$': 'babel-jest', // 这个是jest的默认配置'^.+\\.ts?$': 'ts-jest' // typescript转换}
};

增加 npm scripts

"scripts:" {"test": "jest"
}

Eslint+commitlint

这里使用的部门内部规范化校验工具,直接进行整体的规范化校验,所以不再过多赘述,推荐参考 eslint-config-alloy https://github.com/AlloyTeam/eslint-config-alloy

其他配置

rimraf

这里引入了 rimraf,再每次打包前,将原有的 dist 目录下文件删除

修改 npm scripts

"build": "rimraf dist/* && rollup -c"

release-it

这里引入了release-it,便于我们快速的进行 npm 发布

安装依赖

yarn add release-it -D

新增.release-it.json文件

{"git": {"commitMessage": "chore: release v${version}"},"npm": {"publish": false},"publishConfig": {"registry": "私服地址"}
}

新增 npm scripts

"scripts:" {"release": "release-it",
}

package.json 如下

{"name": "module name","version": "module version","description": "module desc","main": "dist/index.umd.js","types": "types/index.d.ts","module": "dist/index.esm.js","scripts": {"test": "jest","babel": "babel ./src/index.js -o ./dist/index.js","build": "rimraf dist/* && rollup -c","release": "release-it","release:beta": "release-it major --preRelease=beta","fix:src": "npx eslint src --fix --ext .ts","fix:test": "npx eslint test --fix --ext .js","lint": "npm run fix:src && npm run fix:test"},"repository": {"type": "git"},"author": "module author","license": "MIT","devDependencies": {},"dependencies": {}
}

rollup配置及使用相关推荐

  1. 前端工具-Rollup

    拨云见日 Rollup的存在并不是为了取代webpack,仅仅是弥补webpack的一些不足,webpack和rollup各有各的应用场景,rollup专注以ESModule打包/自动treeshak ...

  2. JavaScript模块打包器rollup

    学习资料:拉勾课程<大前端高薪训练营> 阅读建议:搭配文章的侧边栏目录进行食用,体验会更佳哦. 内容说明:本文不做知识点的搬运工,技术详情请查看官方文档. 一:认识rollup rollu ...

  3. Rollup常用插件详解

    文章目录 系列文章 @rollup/plugin-node-resolve Options extensions @rollup/plugin-commonjs @rollup/plugin-babe ...

  4. 深入Vue - 源码目录及构建过程分析

    摘要: Vue源码阅读第一步. 原文:深入vue - 源码目录及构建过程分析 公众号:前端小苑 Fundebug经授权转载,版权归原作者所有. 本文主要梳理一下vue代码的目录,以及vue代码构建流程 ...

  5. webuploader 怎么在react中_另辟蹊径搭建阅读React源码调试环境支持所有React版本细分文件断点调试...

    引言(为什么写这篇文章) 若要高效阅读和理解React源码,搭建调试环境是必不可少的一步.而常规方法:使用react.development.js和react-dom.development.js调试 ...

  6. 我从 Vuejs 中学到了什么——框架设计学问

    框架设计远没有大家想的那么简单,并不是说只把功能开发完成,能用就算完事儿了,这里面还是有很多学问的.比如说,我们的框架应该给用户提供哪些构建产物?产物的模块格式如何?当用户没有以预期的方式使用框架时是 ...

  7. 编译打包vue_Vue 源码分析( 一 )

    Vue 源码分析( 一 )目录结构.版本.入口 1.Vue 源码目录结构 dist:打包之后生成的结果目录 examples:代码示例 scripts:配置文件 src:源代码目录compiler: ...

  8. jQuery:从零开始,DIY一个jQuery(2)

    在上篇文章我们简单实现了一个 jQuery 的基础结构,不过为了顺应潮流,这次咱把它改为模块化的写法,此举得以有效提升项目的可维护性,因此在后续也将以模块化形式进行持续开发. 模块化开发和编译需要用上 ...

  9. 从零开始,DIY一个jQuery(2)

    在上篇文章我们简单实现了一个 jQuery 的基础结构,不过为了顺应潮流,这次咱把它改为模块化的写法,此举得以有效提升项目的可维护性,因此在后续也将以模块化形式进行持续开发. 模块化开发和编译需要用上 ...

最新文章

  1. FCS省选模拟赛 Day5
  2. 8个秘诀成就顶级增长黑客
  3. android 用dx.bat 转换class 为dex
  4. ARM MMU工作原理剖析[转]
  5. iOS vuforia 学习钻研(一)
  6. android清理缓存动画、天气APP、购物下单选择器、阅读APP、饿了么demo等源码
  7. [MAC] 6 个好用小技巧
  8. Linux环境下配置虚拟ip,方法1:新增多个子网卡,每个子网卡有独立的配置文件
  9. 软件测试工程师简历项目经验怎么写?一千个软件测试简历范文模板
  10. [知了堂学习笔记]_Ajax之解析Json
  11. 配置 PO SLD步骤
  12. java判断闰年中闰月_闰年闰月查询表_闰月查询表_闰年查询表-万年历
  13. 文人教你说祝福——古语祝福
  14. mysql 注册驱动_找不到DriverClassName=org.gjt.mm.mysql.Driver的已注册驱动程序
  15. SQL13 从titles表获取按照title进行分组
  16. 计算机会计u8实验报告,用友erp,u8实验总结
  17. 按键精灵curl、FTP、zip、sha1算法、下载文件、上传文件、蓝奏云api、压缩解压文件支持 安卓、IOS
  18. linux 进程流量统计,Linux进程网络流量统计方法及实现
  19. IOS系统ipa软件包在线安装
  20. 岁月的剪影【七月My way】

热门文章

  1. Android开发笔记(四十三)点击事件
  2. 画一个空心圆_圆形在PPT中的6大妙用,每一个都能瞬间提升PPT的逼格!
  3. 【LeetCode】贪心算法--分发糖果(135)
  4. JavaScript数据容量单位转换(KB B MB GB....)
  5. 高级文件系统管理——Linux基本命令(15)
  6. MySQL读取配置文件的顺序、启动方式、启动原理
  7. PostgreSQL数据库 OLTP高并发请求性能优化
  8. CMMI入门 - 通用实践的实施GP 2.1-GP 2.5
  9. GPRS管理与创建APN拨号连接
  10. 【工程项目经验】之32/64位平台printf uint64的方法