UNPKG

1.68 kBJavaScriptView Raw
1// 项目下直接命令$ node rollup.js
2
3const fs = require('fs')
4const rollup = require('rollup')
5const uglifyjs = require('uglify-js')
6const rollupConfig = require('./rollup.config.js')
7const rc = {
8 input: rollupConfig.input, // entry -> input
9 plugins: rollupConfig.plugins
10}
11
12let targets = rollupConfig.targets ? rollupConfig.targets.map(target => ({
13 format: target.format,
14 file: target.file // dest -> file
15})) : [{
16 format: rollupConfig.format,
17 file: rollupConfig.file // dest -> file
18}]
19
20const noBannerFormats = {'cjs': !0, 'es': !0}
21targets.forEach(function (target) {
22 target.banner = noBannerFormats[target.format] ? '' : this.banner
23 target.name = this.name // moduleName -> name
24 target.sourcemap = this.sourcemap // sourceMap -> sourcemap
25}, rollupConfig)
26
27/**
28 * JS压缩最小化
29 * @param {String} code JS代码源文本
30 * @return {String} 返回压缩后的代码文本
31 */
32function minify (code) {
33 let minifyOptions = {
34 fromString: true
35 }
36 let result = uglifyjs.minify(code, minifyOptions)
37 return result.code
38}
39
40rollup.rollup(rc).then(bundle => {
41
42 targets.forEach(target => {
43 bundle.generate(target).then(({code, map}) => {
44 // file 生成的目标文件 dest -> file
45 fs.writeFileSync(target.file, code)
46
47 // 若指定压缩最小化文件
48 if (target.minimize) {
49 let minMain = target.file.replace(/(?=\.js$)/, '.min')
50 minMain === target.file && (minMain += '.min')
51 fs.writeFileSync(minMain, target.banner + minify(code))
52 }
53 })
54 })
55
56 // bundle写入方式
57 // targets.forEach(bundle.write, bundle)
58
59}).catch(e => {
60 process.stderr.write(e.message + '\n')
61 process.exit(1)
62})
\No newline at end of file