Skip to content

Commit cce4b96

Browse files
committed
add rollup
1 parent 9f7d6ff commit cce4b96

File tree

8 files changed

+462
-1760
lines changed

8 files changed

+462
-1760
lines changed

.babelrc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"presets": ["es2015", "stage-2"],
3-
"plugins": ["transform-runtime"],
4-
"comments": false,
5-
"env": {
6-
"test": {
7-
"plugins": [ "istanbul" ]
8-
}
9-
}
2+
"presets": [
3+
["latest", {
4+
"es2015": {
5+
"modules": false
6+
}
7+
}]
8+
],
9+
"plugins": ["external-helpers"]
1010
}

build/build.js

Lines changed: 138 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,146 @@
1-
require('shelljs/global');
2-
var webpack = require('webpack');
3-
var path = require('path');
1+
const fs = require('fs')
2+
const path = require('path')
3+
const zlib = require('zlib')
4+
const uglify = require('uglify-js')
5+
const rollup = require('rollup')
6+
const buble = require('rollup-plugin-buble')
7+
const flow = require('rollup-plugin-flow-no-whitespace')
8+
const cjs = require('rollup-plugin-commonjs')
9+
const node = require('rollup-plugin-node-resolve')
10+
const replace = require('rollup-plugin-replace')
11+
const babel = require('rollup-plugin-babel')
12+
const version = process.env.VERSION || require('../package.json').version
13+
const banner =
14+
`/**
15+
* vuejs-modal v${version}
16+
* (c) ${new Date().getFullYear()} shaodahong
17+
* @license MIT
18+
*/`
419

5-
rm('-rf', 'dist/');
20+
if (!fs.existsSync('dist')) {
21+
fs.mkdirSync('dist')
22+
}
623

7-
module.exports = {
8-
entry: {
9-
index: './src/index.js'
24+
const resolve = _path => path.resolve(__dirname, '../', _path)
25+
26+
build([
27+
// browser dev
28+
{
29+
dest: resolve('dist/vuejs-modal.js'),
30+
format: 'umd',
31+
env: 'development'
1032
},
11-
output: {
12-
path: path.resolve(__dirname, '../dist'),
13-
publicPath: '',
14-
filename: '[name].js'
33+
{
34+
dest: resolve('dist/vuejs-modal.min.js'),
35+
format: 'umd',
36+
env: 'production'
1537
},
16-
resolve: {
17-
extensions: ['*', '.js', '.json'],
38+
{
39+
dest: resolve('dist/vuejs-modal.common.js'),
40+
format: 'cjs'
1841
},
19-
module: {
20-
rules: [{
21-
test: /\.js$/,
22-
exclude: /(node_modules)/,
23-
use: {
24-
loader: 'babel-loader'
42+
{
43+
dest: resolve('dist/vuejs-modal.esm.js'),
44+
format: 'es'
45+
}
46+
].map(genConfig))
47+
48+
function build(builds) {
49+
let built = 0
50+
const total = builds.length
51+
const next = () => {
52+
buildEntry(builds[built]).then(() => {
53+
built++
54+
if (built < total) {
55+
next()
2556
}
26-
}]
57+
}).catch(logError)
58+
}
59+
60+
next()
61+
}
62+
63+
function genConfig(opts) {
64+
const config = {
65+
entry: resolve('src/index.js'),
66+
dest: opts.dest,
67+
format: opts.format,
68+
banner,
69+
moduleName: 'vuejsModal',
70+
plugins: [
71+
flow(),
72+
node(),
73+
cjs(),
74+
replace({
75+
__VERSION__: version
76+
}),
77+
buble(),
78+
babel()
79+
]
80+
}
81+
82+
if (opts.env) {
83+
config.plugins.unshift(replace({
84+
'process.env.NODE_ENV': JSON.stringify(opts.env)
85+
}))
2786
}
87+
88+
return config
89+
}
90+
91+
function buildEntry(config) {
92+
93+
const isProd = /min\.js$/.test(config.dest)
94+
return rollup.rollup(config).then(bundle => {
95+
return bundle.generate(config).then(res => {
96+
const code = res.code
97+
if (isProd) {
98+
var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
99+
output: {
100+
ascii_only: true
101+
},
102+
compress: {
103+
pure_funcs: ['makeMap']
104+
}
105+
}).code
106+
return write(config.dest, minified, true)
107+
} else {
108+
return write(config.dest, code)
109+
}
110+
})
111+
112+
})
113+
}
114+
115+
function write(dest, code, zip) {
116+
return new Promise((resolve, reject) => {
117+
function report(extra) {
118+
console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
119+
resolve()
120+
}
121+
122+
fs.writeFile(dest, code, err => {
123+
if (err) return reject(err)
124+
if (zip) {
125+
zlib.gzip(code, (err, zipped) => {
126+
if (err) return reject(err)
127+
report(' (gzipped: ' + getSize(zipped) + ')')
128+
})
129+
} else {
130+
report()
131+
}
132+
})
133+
})
134+
}
135+
136+
function getSize(code) {
137+
return (code.length / 1024).toFixed(2) + 'kb'
138+
}
139+
140+
function logError(e) {
141+
console.log(e)
142+
}
143+
144+
function blue(str) {
145+
return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
28146
}

0 commit comments

Comments
 (0)