-
-
Notifications
You must be signed in to change notification settings - Fork 17
/
rollup.config.js
122 lines (115 loc) · 2.68 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
import eslint from "@rollup/plugin-eslint";
import typescript from "@rollup/plugin-typescript";
import { writeFileSync } from "fs";
import copy from "rollup-plugin-copy";
import prettier from "rollup-plugin-prettier";
import sass from "rollup-plugin-sass";
import { terser } from "rollup-plugin-terser";
const targetFolder = "dist";
const chromeTargetFolder = "dist_chrome";
const output = [
{
dir: targetFolder,
format: "iife",
globals: {
"webextension-polyfill": "browser",
},
},
{
dir: chromeTargetFolder,
format: "iife",
globals: {
"webextension-polyfill": "chrome",
},
},
];
function sassPlugin(filename) {
return sass({
output: (styles) => {
writeFileSync(`${targetFolder}/${filename}.css`, styles);
writeFileSync(`${chromeTargetFolder}/${filename}.css`, styles);
},
});
}
const plugins = {
copy: copy({
targets: [
{ src: "node_modules/webextension-polyfill/dist/browser-polyfill.js", dest: targetFolder },
{ src: "node_modules/webextension-polyfill/dist/browser-polyfill.js", dest: chromeTargetFolder },
{ src: "assets/*", dest: targetFolder },
{ src: "assets/*", dest: chromeTargetFolder },
{
src: "assets/manifest.json",
dest: chromeTargetFolder,
transform: (contents, filename) => {
if (filename.includes("manifest.json")) {
const manifest = JSON.parse(contents.toString());
manifest.background = {
service_worker: "background.js",
type: "module",
};
return JSON.stringify(manifest, null, 2);
}
},
},
],
}),
commons: [
typescript(),
prettier({
tabWidth: 2,
singleQuote: false,
}),
eslint({
include: ["src/**/*.ts"],
}),
],
};
if (process.env.NODE_ENV === "production") {
plugins.commons.push(terser());
}
const config = [
{
external: ["webextension-polyfill"],
input: "src/content/index.ts",
output,
plugins: [...plugins.commons, sassPlugin("style"), plugins.copy],
},
{
external: ["webextension-polyfill"],
input: "src/background/background.ts",
output,
plugins: [...plugins.commons],
},
{
external: ["webextension-polyfill"],
input: "src/popup/popup.ts",
output,
plugins: [
...plugins.commons,
sassPlugin("popup"),
copy({
targets: [
{ src: "src/popup/popup.html", dest: targetFolder },
{ src: "src/popup/popup.html", dest: chromeTargetFolder },
],
}),
],
},
{
external: ["webextension-polyfill"],
input: "src/options/options.ts",
output,
plugins: [
...plugins.commons,
sassPlugin("options"),
copy({
targets: [
{ src: "src/options/options.html", dest: targetFolder },
{ src: "src/options/options.html", dest: chromeTargetFolder },
],
}),
],
},
];
export default config;