-
Notifications
You must be signed in to change notification settings - Fork 207
/
Copy pathrollup.js
114 lines (97 loc) · 3.19 KB
/
rollup.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
const path = require('path')
const fs = require('fs')
const spawn = require('cross-spawn')
const mkdirp = require('mkdirp')
const glob = require('glob')
const rimraf = require('rimraf')
const yargsParser = require('yargs-parser')
const {
hasFile,
resolveBin,
fromRoot,
getConcurrentlyArgs,
} = require('../../utils')
const crossEnv = resolveBin('cross-env')
const rollup = resolveBin('rollup')
const args = process.argv.slice(2)
const here = p => path.join(__dirname, p)
const hereRelative = p => here(p).replace(process.cwd(), '.')
const parsedArgs = yargsParser(args)
const useBuiltinConfig =
!args.includes('--config') && !hasFile('rollup.config.js')
const config = useBuiltinConfig
? `--config ${hereRelative('../../config/rollup.config.js')}`
: args.includes('--config') ? '' : '--config' // --config will pick up the rollup.config.js file
const environment = parsedArgs.environment
? `--environment ${parsedArgs.environment}`
: ''
const watch = parsedArgs.watch ? '--watch' : ''
let formats = ['esm', 'cjs', 'umd', 'umd.min']
if (typeof parsedArgs.bundle === 'string') {
formats = parsedArgs.bundle.split(',')
}
const defaultEnv = 'BUILD_ROLLUP=true'
const getCommand = (env, ...flags) =>
[crossEnv, defaultEnv, env, rollup, config, environment, watch, ...flags]
.filter(Boolean)
.join(' ')
const buildPreact = args.includes('--p-react')
const scripts = buildPreact
? getPReactScripts()
: getConcurrentlyArgs(getCommands())
const cleanBuildDirs = !args.includes('--no-clean')
if (cleanBuildDirs) {
rimraf.sync(fromRoot('dist'))
}
if (buildPreact) {
if (cleanBuildDirs) {
rimraf.sync(fromRoot('preact'))
}
mkdirp.sync(fromRoot('preact'))
}
const result = spawn.sync(resolveBin('concurrently'), scripts, {
stdio: 'inherit',
})
if (result.status === 0 && buildPreact && !args.includes('--no-package-json')) {
const preactPkg = fromRoot('preact/package.json')
const preactDir = fromRoot('preact')
const cjsFile = glob.sync(fromRoot('preact/**/*.cjs.js'))[0]
const esmFile = glob.sync(fromRoot('preact/**/*.esm.js'))[0]
fs.writeFileSync(
preactPkg,
JSON.stringify(
{
main: path.relative(preactDir, cjsFile),
'jsnext:main': path.relative(preactDir, esmFile),
module: path.relative(preactDir, esmFile),
},
null,
2
)
)
}
function getPReactScripts() {
const reactCommands = prefixKeys('react.', getCommands())
const preactCommands = prefixKeys('preact.', getCommands('BUILD_PREACT=true'))
return getConcurrentlyArgs(Object.assign(reactCommands, preactCommands))
}
function prefixKeys(prefix, object) {
return Object.entries(object).reduce((cmds, [key, value]) => {
cmds[`${prefix}${key}`] = value
return cmds
}, {})
}
function getCommands(env = '') {
return formats.reduce((cmds, format) => {
const [formatName, minify = false] = format.split('.')
const nodeEnv = minify ? 'production' : 'development'
const sourceMap = formatName === 'umd' ? '--sourcemap' : ''
const buildMinify = Boolean(minify)
cmds[format] = getCommand(
`BUILD_FORMAT=${formatName} BUILD_MINIFY=${buildMinify} NODE_ENV=${nodeEnv} ${env}`,
sourceMap
)
return cmds
}, {})
}
process.exit(result.status)