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
+ */`
4
19
5
- rm ( '-rf' , 'dist/' ) ;
20
+ if ( ! fs . existsSync ( 'dist' ) ) {
21
+ fs . mkdirSync ( 'dist' )
22
+ }
6
23
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'
10
32
} ,
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 '
15
37
} ,
16
- resolve : {
17
- extensions : [ '*' , '.js' , '.json' ] ,
38
+ {
39
+ dest : resolve ( 'dist/vuejs-modal.common.js' ) ,
40
+ format : 'cjs'
18
41
} ,
19
- module : {
20
- rules : [ {
21
- test : / \. j s $ / ,
22
- exclude : / ( n o d e _ m o d u l e s ) / ,
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 ( )
25
56
}
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
+ } ) )
27
86
}
87
+
88
+ return config
89
+ }
90
+
91
+ function buildEntry ( config ) {
92
+
93
+ const isProd = / m i n \. j s $ / . 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'
28
146
}
0 commit comments