rollup + typescript 构建 ts 包
时间:2022-07-28
本文章向大家介绍rollup + typescript 构建 ts 包,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
安装依赖
- rollup 打包工具
- rollup-plugin-node-resolve 依赖引入插件
- rollup-plugin-commonjs commonjs 转换
- rollup-plugin-eslint eslint 校验
- rollup-plugin-typescript2 ts 转换
- @typescript-eslint/parser eslint ts 解析器
- typescript ts解析器
rollup 配置
import path from 'path'
import resolve from 'rollup-plugin-node-resolve' // 依赖引用插件
import commonjs from 'rollup-plugin-commonjs' // commonjs模块转换插件
import { eslint } from 'rollup-plugin-eslint' // eslint插件
import ts from 'rollup-plugin-typescript2'
const getPath = _path => path.resolve(__dirname, _path)
import packageJSON from './package.json'
const extensions = [
'.js',
'.ts',
'.tsx'
]
// ts
const tsPlugin = ts({
tsconfig: getPath('./tsconfig.json'), // 导入本地ts配置
extensions
})
// eslint
const esPlugin = eslint({
throwOnError: true,
include: ['src/**/*.ts'],
exclude: ['node_modules/**', 'lib/**']
})
// 基础配置
const commonConf = {
input: getPath('./src/index.ts'),
plugins:[
resolve(extensions),
commonjs(),
esPlugin,
tsPlugin,
]
}
// 需要导出的模块类型
const outputMap = [
{
file: packageJSON.main, // 通用模块
format: 'umd',
},
{
file: packageJSON.module, // es6模块
format: 'es',
}
]
const buildConf = options => Object.assign({}, commonConf, options)
export default outputMap.map(output => buildConf({ output: {name: packageJSON.name, ...output}
typescript配置 tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "./lib", // 输出目录
"sourceMap": false, // 是否生成sourceMap
"target": "esnext", // 编译目标
"module": "esnext", // 模块类型
"moduleResolution": "node",
"allowJs": false, // 是否编辑js文件
"strict": true, // 严格模式
"noUnusedLocals": true, // 未使用变量报错
"experimentalDecorators": true, // 启动装饰器
"resolveJsonModule": true, // 加载json
"esModuleInterop": true,
"removeComments": false, // 删除注释
"declaration": true, // 生成定义文件
"declarationMap": false, // 生成定义sourceMap
"declarationDir": "./lib/types", // 定义文件输出目录
"lib": ["esnext", "dom"], // 导入库类型定义
"types": ["node"] // 导入指定类型包
},
"include": [
"src/*" // 导入目录
]
eslint 配置 .eslintrc.js
const path = require('path')
const resolve = _path => path.resolve(__dirname, _path)
const DOMGlobals = ['window', 'document']
const NodeGlobals = ['module', 'require']
module.exports = {
env: {
browser: true,
es6: true
},
parser: '@typescript-eslint/parser', // 配置ts解析器
parserOptions: {
project: resolve('./tsconfig.json'),
tsconfigRootDir: resolve('./'),
sourceType: 'module'
},
// plugins: ['prettier'],
rules: {
'indent': ['error', 2],
'no-unused-vars': 'error',
'no-restricted-globals': ['error', ...DOMGlobals, ...NodeGlobals],
'no-console': 'off',
}
};
package.json
{
"main": "lib/index.js",
"module": "lib/index.esm.js",
"scripts": {
"dev": "set NODE_ENV=developemnt&& rollup -c rollup.config.js -w",
"build": "rm -fr lib && set NODE_ENV=production&& rollup -c rollup.config.js"
},
"types": "lib/index.d.ts", // 指定类型定义文件
...
}
- ASP.NET MVC4 Web API 堆栈将添加指定消息处理功能
- 页面copyright部分始终居于页面底部
- Hammock for REST
- 网页超过一屏时自动浮动在网页最上方的图层特效
- 关于gcc、glibc和binutils模块之间的关系
- 贝叶斯过滤算法
- 強大的jQuery Chart组件-Highcharts
- vue2.0 配置 选项 属性 方法 事件 ——速查
- 亲密接触IIS 8和Web Deploy 3.0
- vue2.0 组件通信
- 在MongoDB中实现聚合函数
- 原生JS编写的照片墙效果实例演示特效
- 使用SuperWebSocket 构建实时 Web 应用
- Vue2.0的变化 ,组件模板,生命周期,循环,自定义键盘指令,过滤器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 团体程序设计天梯赛-练习集 L1-007 念数字
- 团体程序设计天梯赛-练习集 L1-008 求整数段和
- K8s多租户场景下的多层级namespace规则解析
- 团体程序设计天梯赛-练习集 L1-010 比较大小
- 团体程序设计天梯赛-练习集 L1-012 计算指数
- 团体程序设计天梯赛-练习集 L1-013 计算阶乘和
- 团体程序设计天梯赛-练习集 L1-036 A乘以B
- 团体程序设计天梯赛-练习集 L1-015 跟奥巴马一起画方块
- 团体程序设计天梯赛-练习集 L1-011 A-B
- vuepress引入vue-qr组件后build报错navigator is not defined问题
- 团体程序设计天梯赛-练习集 L1-022 奇偶分家
- k8s——针对有状态服务实现数据持久化
- 团体程序设计天梯赛-练习集 L1-017 到底有多二
- 团体程序设计天梯赛-练习集 L1-032 Left-pad
- ansible运行报错CryptographyDeprecationWarning解决