-
Notifications
You must be signed in to change notification settings - Fork 9
/
rollup.config.js
158 lines (153 loc) · 4.19 KB
/
rollup.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* eslint-disable no-undef */
/*
* @Author: 徐庆凯
* @Date: 2022-11-18 14:56:37
* @LastEditTime: 2023-04-27 15:23:38
* @LastEditors: weisheng
* @Description:
* @FilePath: \uni-mini-router\rollup.config.js
* 记得注释
*/
import path from 'path'
import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import rollupTypescript from 'rollup-plugin-typescript2'
import babel from '@rollup/plugin-babel'
import json from '@rollup/plugin-json'
import fs from 'fs'
import filesize from 'rollup-plugin-filesize' // 打包后在控制台显示文件大小。
import {
DEFAULT_EXTENSIONS
} from '@babel/core'
import {
terser
} from 'rollup-plugin-terser'
import pkg from './package.json'
const now = new Date()
const banner = `/*!
* ${pkg.name} v${pkg.version}
* ${now.getFullYear()}/${now.getMonth()+1}/${now.getDate()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()} weisheng
*/`
const componentRoot = path.join(__dirname, './src')
const componentNames = fs
// 获取所有文件夹及文件
.readdirSync(`${componentRoot}`, {
withFileTypes: true
})
// 筛选出所有文件夹
.filter((p) => {
return p.isDirectory() && fs.existsSync(`${componentRoot}/${p.name}/index.ts`)
})
// 数据预处理
.map((p) => {
return {
path: `${p.name}/index`,
name: p.name
}
})
// 当前运行环境,可通过 cross-env 命令行设置
// const env = process.env.NODE_ENV
// umd/iife 模式的编译结果文件输出的全局变量名称
let output = [
// es module
{
// package.json 配置的 module 属性
file: pkg.main,
format: 'es',
banner
},
]
function createConfigs() {
let configs = output.map((o) => {
const config = {
// 入口文件,src/index.ts
input: path.resolve(__dirname, 'src/index.ts'),
// 输出文件
output: o,
external: o.format === 'es' ? ['vue', 'qs'] : [],
plugins: [
// 解析第三方依赖
resolve({
jsnext: true,
preferBuiltins: true,
browser: true
}),
// 识别 commonjs 模式第三方依赖
commonjs(),
// rollup 编译 typescript
rollupTypescript(),
// babel 配置
babel({
// 编译库使用 runtime
babelHelpers: 'runtime',
// 只转换源代码,不转换外部依赖
exclude: 'node_modules/**',
// babel 默认不支持 ts 需要手动添加
extensions: [...DEFAULT_EXTENSIONS, '.ts']
}),
// 解析json
json(),
filesize(),
terser({
compress: {
pure_getters: true,
unsafe: true,
unsafe_comps: true,
warnings: false
}
})
]
}
return config
})
let config = {
input: componentNames.reduce((result, p) => {
let key = p.path
result[key] = `${componentRoot}/${p.path.replace(/\/index/g, '')}`
return result
}, {}),
output: {
dir: 'lib',
chunkFileNames: 'esm.js',
format: 'es',
banner: banner
},
treeshake: true,
external: ['vue', 'qs'],
plugins: [
// 解析第三方依赖
resolve({
jsnext: true,
preferBuiltins: true,
browser: true,
extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx']
}),
// 识别 commonjs 模式第三方依赖
commonjs(),
// rollup 编译 typescript
rollupTypescript(),
// babel 配置
babel({
// 编译库使用 runtime
babelHelpers: 'runtime',
// 只转换源代码,不转换外部依赖
exclude: 'node_modules/**',
// babel 默认不支持 ts 需要手动添加
extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx']
}),
// 解析json
json(),
filesize(),
terser({
compress: {
pure_getters: true,
unsafe: true,
unsafe_comps: true,
warnings: false
}
})
]
}
return [...configs, config]
}
export default createConfigs()