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 replace = require ( 'rollup-plugin-replace' )
7+ const version = process . env . VERSION || require ( '../package.json' ) . version
8+ const banner =
9+ `/**
10+ * vue-class-component v${ version }
11+ * (c) 2015-${ new Date ( ) . getFullYear ( ) } Evan You
12+ * @license MIT
13+ */`
14+
15+ if ( ! fs . existsSync ( 'dist' ) ) {
16+ fs . mkdirSync ( 'dist' )
17+ }
18+
19+ const resolve = _path => path . resolve ( __dirname , '../' , _path )
20+
21+ build ( [
22+ {
23+ dest : resolve ( 'dist/vue-class-component.js' ) ,
24+ format : 'umd' ,
25+ env : 'development'
26+ } ,
27+ {
28+ dest : resolve ( 'dist/vue-class-component.min.js' ) ,
29+ format : 'umd' ,
30+ env : 'production'
31+ } ,
32+ {
33+ dest : resolve ( 'dist/vue-class-component.common.js' ) ,
34+ format : 'cjs'
35+ }
36+ ] . map ( genConfig ) )
37+
38+ function build ( builds ) {
39+ let built = 0
40+ const total = builds . length
41+ const next = ( ) => {
42+ buildEntry ( builds [ built ] ) . then ( ( ) => {
43+ built ++
44+ if ( built < total ) {
45+ next ( )
46+ }
47+ } ) . catch ( logError )
48+ }
49+
50+ next ( )
51+ }
52+
53+ function genConfig ( opts ) {
54+ const config = {
55+ entry : resolve ( 'lib/index.js' ) ,
56+ dest : opts . dest ,
57+ format : opts . format ,
58+ banner,
59+ moduleName : 'VueClassComponent' ,
60+ exports : 'named' ,
61+ external : [ 'vue' ] ,
62+ globals : {
63+ vue : 'Vue'
64+ } ,
65+ plugins : [ ]
66+ }
67+
68+ if ( opts . env ) {
69+ config . plugins . unshift ( replace ( {
70+ 'process.env.NODE_ENV' : JSON . stringify ( opts . env )
71+ } ) )
72+ }
73+
74+ return config
75+ }
76+
77+ function buildEntry ( config ) {
78+ const isProd = / m i n \. j s $ / . test ( config . dest )
79+ return rollup . rollup ( config ) . then ( bundle => {
80+ const code = bundle . generate ( config ) . code
81+ if ( isProd ) {
82+ var minified = ( config . banner ? config . banner + '\n' : '' ) + uglify . minify ( code , {
83+ fromString : true ,
84+ output : {
85+ screw_ie8 : true
86+ }
87+ } ) . code
88+ return write ( config . dest , minified , true )
89+ } else {
90+ return write ( config . dest , code )
91+ }
92+ } )
93+ }
94+
95+ function write ( dest , code , zip ) {
96+ return new Promise ( ( resolve , reject ) => {
97+ function report ( extra ) {
98+ console . log ( blue ( path . relative ( process . cwd ( ) , dest ) ) + ' ' + getSize ( code ) + ( extra || '' ) )
99+ resolve ( )
100+ }
101+
102+ fs . writeFile ( dest , code , err => {
103+ if ( err ) return reject ( err )
104+ if ( zip ) {
105+ zlib . gzip ( code , ( err , zipped ) => {
106+ if ( err ) return reject ( err )
107+ report ( ' (gzipped: ' + getSize ( zipped ) + ')' )
108+ } )
109+ } else {
110+ report ( )
111+ }
112+ } )
113+ } )
114+ }
115+
116+ function getSize ( code ) {
117+ return ( code . length / 1024 ) . toFixed ( 2 ) + 'kb'
118+ }
119+
120+ function logError ( e ) {
121+ console . log ( e )
122+ }
123+
124+ function blue ( str ) {
125+ return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
126+ }
0 commit comments