-
-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathesbuild.config.js
97 lines (86 loc) · 2.28 KB
/
esbuild.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
const esbuild = require("esbuild");
const assetsManifestPlugin = require("esbuild-plugin-assets-manifest");
const postcssPlugin = require("@deanc/esbuild-plugin-postcss");
const fs = require("fs");
const chokidar = require('chokidar');
const path = require("path");
// PostCSS plugins
const postcssImport = require("postcss-import");
const postcssNesting = require("postcss-nesting");
const postcssCustomMedia = require('postcss-custom-media');
const autoprefixer = require("autoprefixer");
const postcssCopy = require("postcss-copy")({
dest: "../assets/fonts",
});
const postcssDesignTokenUtils = require("postcss-design-token-utils");
const designTokensConfig = require("./style-tokens/tokens.js");
let minify = false;
let sourcemap = true;
let entryNames = "[name]";
const watchDirectories = [ "./css", "./js", "./style-tokens"];
const mkProdPlugins = () => {
return [
assetsManifestPlugin({
filename: "manifest.json",
path: "../static",
processOutput(assets) {
console.log(assets);
const orderAssets = {
"app.js": assets.app.js,
"styles.css": assets[''].css[0],
"prism.js": assets.prism.js,
}
return JSON.stringify(orderAssets, null, " ");
}
})
];
}
const pluginsList = () => {
let plugins = [
postcssPlugin({
plugins: [
postcssDesignTokenUtils({
tokens: designTokensConfig,
}),
postcssImport,
postcssNesting,
postcssCustomMedia,
autoprefixer,
postcssCopy,
],
})];
let prodPlugins = process.env.NODE_ENV === "prod" ? mkProdPlugins() : [];
return plugins.concat(prodPlugins);
}
if (process.env.NODE_ENV === "prod") {
minify = true;
sourcemap = false;
entryNames = "[name]-[hash]";
}
const config = {
color: true,
entryPoints: {
"app": "./js/app.js",
"styles": "./css/styles.css",
"prism": "./js/prism.js",
},
outdir: "../static",
bundle: true,
logLevel: "info",
sourcemap: sourcemap,
minify: minify,
target: "es2018",
entryNames: entryNames,
plugins: pluginsList(),
metafile: true,
}
console.log(config.outdir);
console.log(__dirname);
if (process.argv.includes("--watch")) {
(async () => {
const context = esbuild.context(config);
await context.watch();
})
} else {
esbuild.build(config).catch(() => process.exit(1))
}