-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
rollup.config.mjs
108 lines (98 loc) · 2.46 KB
/
rollup.config.mjs
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
import copy from "rollup-plugin-copy";
import sass from "rollup-plugin-sass";
import typescript from "@rollup/plugin-typescript";
import autoprefixer from "autoprefixer";
import fs from "fs";
import path from "path";
import postcss from "postcss";
import pkg from "./package.json" with { type: "json" };
const entries = {
index: "src/plugins/theme.ts",
scss: "src/assets/scss",
};
const exits = {
directory: "dist",
css: "dist/oruga.css",
esm: `${pkg.module}`,
umd: `${pkg.main}`,
};
const commonSassPluginOptions = {
processor: async (css) => {
const { css: processedCss } = await postcss([autoprefixer]).process(css, {
from: undefined,
});
return processedCss;
},
options: {
includePaths: ["node_modules"],
},
};
const typescriptPluginOptions = {
sourceMap: false,
};
function createDirectoryIfDoesNotExist(filePath) {
const directoryName = path.dirname(filePath);
if (fs.existsSync(directoryName)) {
return true;
}
createDirectoryIfDoesNotExist(directoryName);
fs.mkdirSync(directoryName);
}
function createMinifiedFileName(fileName) {
const fileNameParts = fileName.split(".");
const fileExtIndex = fileNameParts.length - 1;
const minifiedFileName = [
...fileNameParts.slice(0, fileExtIndex),
"min",
fileNameParts[fileExtIndex],
].join(".");
return minifiedFileName;
}
function writeCssFile(fileName, styles) {
createDirectoryIfDoesNotExist(exits.css);
fs.writeFileSync(fileName, styles);
}
export default function () {
const config = [
{
input: entries.index,
external: ["vue", /oruga\/.*/],
output: [
{
format: "esm",
file: `${exits.esm}`,
},
{
format: "umd",
name: "OrugaDefaultTheme",
file: `${exits.umd}`,
},
],
plugins: [
copy({
targets: [{ src: `${entries.scss}`, dest: `${exits.directory}` }],
}),
sass({
...commonSassPluginOptions,
output(styles) {
writeCssFile(`${exits.css}`, styles);
},
}),
sass({
...commonSassPluginOptions,
output(styles) {
writeCssFile(`${createMinifiedFileName(exits.css)}`, styles);
},
...{
options: {
outputStyle: "compressed",
...commonSassPluginOptions.options,
},
},
}),
typescript(typescriptPluginOptions),
],
},
];
return config;
}