Skip to content

Commit 1fcffbd

Browse files
committed
feat: add esbuild config for dev and production envs
1 parent cb05513 commit 1fcffbd

File tree

4 files changed

+393
-20
lines changed

4 files changed

+393
-20
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,7 @@ yarn-error.log
3535
!.babelrc
3636
!.gitignore
3737
!.npmignore
38+
39+
# yalc
40+
/.yalc
41+

esbuild.config.dev.mjs

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import * as esbuild from 'esbuild'
2+
import cssModulesPlugin from 'esbuild-css-modules-plugin'
3+
import fs from 'fs'
4+
5+
const ctx = await esbuild.context({
6+
entryPoints: ['./src/index-dev.tsx'],
7+
bundle: true,
8+
outdir: 'build',
9+
treeShaking: true,
10+
plugins: [
11+
cssModulesPlugin({
12+
v2: true,
13+
v2CssModulesOption: {
14+
pattern: `react-tooltip__[local]_[hash]`,
15+
},
16+
}),
17+
],
18+
})
19+
20+
fs.copyFile('./public/index.html', './build/index.html', (err) => {
21+
if (err) throw err
22+
})
23+
24+
await ctx.watch()
25+
26+
const { port } = await ctx.serve({
27+
servedir: 'build',
28+
port: 3000,
29+
host: 'localhost',
30+
})
31+
32+
console.log(`\n\n# Live Server: localhost:${port}`)

esbuild.config.prod.mjs

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import * as esbuild from 'esbuild'
2+
import cssModulesPlugin from 'esbuild-css-modules-plugin'
3+
import fs from 'fs'
4+
5+
const buildsConfig = [
6+
{
7+
format: 'esm',
8+
outfile: 'dist/react-tooltip.esm.js',
9+
minify: false,
10+
},
11+
{
12+
format: 'cjs',
13+
outfile: 'dist/react-tooltip.cjs.js',
14+
minify: false,
15+
},
16+
{
17+
format: 'iife',
18+
outfile: 'dist/react-tooltip.iife.js',
19+
minify: false,
20+
},
21+
{
22+
format: 'esm',
23+
outfile: 'dist/react-tooltip.js', // for styles be exported as `react-tooltip.css`
24+
minify: false,
25+
},
26+
{
27+
format: 'esm',
28+
outfile: 'dist/react-tooltip.esm.min.js',
29+
minify: true,
30+
},
31+
{
32+
format: 'cjs',
33+
outfile: 'dist/react-tooltip.cjs.min.js',
34+
minify: true,
35+
},
36+
{
37+
format: 'iife',
38+
outfile: 'dist/react-tooltip.iife.min.js',
39+
minify: true,
40+
},
41+
{
42+
format: 'esm',
43+
outfile: 'dist/react-tooltip.min.js',
44+
minify: true,
45+
},
46+
]
47+
48+
const builds = []
49+
50+
buildsConfig.forEach(({ format, outfile, minify }) => {
51+
builds.push(
52+
esbuild.build({
53+
entryPoints: ['./src/index.tsx'],
54+
bundle: true,
55+
outfile,
56+
format,
57+
treeShaking: true,
58+
minify,
59+
external: ['react', 'react-dom', 'prop-types'],
60+
plugins: [
61+
cssModulesPlugin({
62+
// inject: true,
63+
v2: true,
64+
v2CssModulesOption: {
65+
pattern: `react-tooltip__[local]_[hash]`,
66+
},
67+
}),
68+
],
69+
}),
70+
)
71+
})
72+
73+
await Promise.allSettled(builds)
74+
75+
// Remove all unecessary or duplicated files from `dist` folder after build
76+
fs.unlink('./dist/react-tooltip.cjs.css', () => null) // generated by cjs build
77+
fs.unlink('./dist/react-tooltip.esm.css', () => null) // generated by esm build
78+
fs.unlink('./dist/react-tooltip.iife.css', () => null) // generated by iife build
79+
fs.unlink('./dist/react-tooltip.cjs.min.css', () => null) // generated by minified cjs build
80+
fs.unlink('./dist/react-tooltip.esm.min.css', () => null) // generated by minified esm build
81+
fs.unlink('./dist/react-tooltip.iife.min.css', () => null) // generated by minified iife build
82+
fs.unlink('./dist/react-tooltip.js', () => null) // generated by css build
83+
fs.unlink('./dist/react-tooltip.min.js', () => null) // generated by minified css build

0 commit comments

Comments
 (0)