1
1
import path from 'node:path' ;
2
2
import esbuild from 'rollup-plugin-esbuild' ;
3
+ import injectProcessEnv from 'rollup-plugin-inject-process-env' ;
4
+ import peerDepsExternalPlugin from 'rollup-plugin-peer-deps-external' ;
3
5
import sourcemaps from 'rollup-plugin-sourcemaps' ;
4
6
import repo from './package.json' with { type : 'json' } ;
5
7
import commonjs from '@rollup/plugin-commonjs' ;
@@ -15,9 +17,23 @@ const paths = {
15
17
16
18
const {
17
19
dependencies = { } ,
18
- peerDependencies = { } ,
19
20
} = repo ;
20
21
22
+ const plugins = ( { env, esmExternals = false } = { } ) => [
23
+ json ( ) ,
24
+ esbuild ( { target : moduleTarget , minify : env === 'production' } ) ,
25
+ sourcemaps ( ) ,
26
+ commonjs ( { esmExternals } ) ,
27
+ ...( env ? [ injectProcessEnv ( {
28
+ NODE_ENV : env
29
+ } ) ] : [ ] ) ,
30
+ resolve ( {
31
+ browser : true ,
32
+ preferBuiltins : false ,
33
+ } ) ,
34
+ peerDepsExternalPlugin ( ) ,
35
+ ] ;
36
+
21
37
/**
22
38
* Escapes the `RegExp` special characters.
23
39
* @param {string } str
@@ -36,57 +52,59 @@ function convertPackageNameToRegExp(packageName)
36
52
return new RegExp ( `^${ escapeRegExp ( packageName ) } (/.+)?$` ) ;
37
53
}
38
54
39
- // Check for bundle folder
40
- const external = Object . keys ( dependencies )
41
- . concat ( Object . keys ( peerDependencies ) )
42
- . map ( convertPackageNameToRegExp ) ;
55
+ const external = ( { bundleDeps = true } = { } ) => ( bundleDeps ? [ ] : Object . keys ( dependencies ) . map ( convertPackageNameToRegExp ) ) ;
43
56
44
- export default {
45
- input : 'src/index.ts' ,
46
- output : [
47
- {
48
- dir : paths . library ,
49
- entryFileNames : '[name].js' ,
50
- exports : 'named' ,
51
- format : 'cjs' ,
52
- preserveModules : true ,
53
- preserveModulesRoot : paths . source ,
54
- sourcemap : true ,
55
- } ,
56
- {
57
- dir : paths . library ,
58
- entryFileNames : '[name].mjs' ,
59
- exports : 'named' ,
60
- format : 'esm' ,
61
- preserveModules : true ,
62
- preserveModulesRoot : paths . source ,
63
- sourcemap : true ,
64
- } ,
65
- {
66
- dir : paths . distributable ,
67
- entryFileNames : '[name].js' ,
68
- exports : 'named' ,
69
- format : 'cjs' ,
70
- sourcemap : true ,
71
- } ,
72
- {
73
- dir : paths . distributable ,
74
- entryFileNames : '[name].mjs' ,
75
- exports : 'named' ,
76
- format : 'esm' ,
77
- sourcemap : true ,
78
- } ,
79
- ] ,
80
- plugins : [
81
- esbuild ( { target : moduleTarget } ) ,
82
- sourcemaps ( ) ,
83
- resolve ( {
84
- browser : true ,
85
- preferBuiltins : false ,
86
- } ) ,
87
- commonjs ( ) ,
88
- json ( ) ,
89
- ] ,
90
- external,
91
- treeshake : false
57
+ const targets = {
58
+ lib : {
59
+ path : paths . library ,
60
+ entryFileNames : '[name]' ,
61
+ env : undefined ,
62
+ external : external ( ) ,
63
+ preserveModules : true ,
64
+ esmExternals : false ,
65
+ } ,
66
+ 'dist-dev' : {
67
+ path : paths . distributable ,
68
+ entryFileNames : 'pixi-react' ,
69
+ env : 'development' ,
70
+ external : external ( { bundleDeps : true } ) ,
71
+ preserveModules : false ,
72
+ esmExternals : true ,
73
+ } ,
74
+ 'dist-prod' : {
75
+ path : paths . distributable ,
76
+ entryFileNames : 'pixi-react.min' ,
77
+ env : 'production' ,
78
+ external : external ( { bundleDeps : true } ) ,
79
+ preserveModules : false ,
80
+ esmExternals : true ,
81
+ } ,
92
82
} ;
83
+
84
+ export default [ 'lib' , 'dist-dev' , 'dist-prod' ] . map ( ( target ) =>
85
+ ( {
86
+ input : 'src/index.ts' ,
87
+ output : [
88
+ {
89
+ dir : targets [ target ] . path ,
90
+ entryFileNames : `${ targets [ target ] . entryFileNames } .js` ,
91
+ exports : 'named' ,
92
+ format : 'cjs' ,
93
+ preserveModules : targets [ target ] . preserveModules ,
94
+ preserveModulesRoot : paths . source ,
95
+ sourcemap : true ,
96
+ } ,
97
+ {
98
+ dir : targets [ target ] . path ,
99
+ entryFileNames : `${ targets [ target ] . entryFileNames } .mjs` ,
100
+ exports : 'named' ,
101
+ format : 'esm' ,
102
+ preserveModules : targets [ target ] . preserveModules ,
103
+ preserveModulesRoot : paths . source ,
104
+ sourcemap : true ,
105
+ } ,
106
+ ] ,
107
+ plugins : plugins ( { env : targets [ target ] . env , esmExternals : targets [ target ] . esmExternals } ) ,
108
+ external : targets [ target ] . external ,
109
+ treeshake : false
110
+ } ) ) ;
0 commit comments