1- "use strict" ;
2-
3- const ora = require ( "ora" ) ;
4- const rm = require ( "rimraf" ) ;
5- const path = require ( "path" ) ;
1+ /* eslint-disable */
2+ const vue = require ( "rollup-plugin-vue" ) ;
3+ const rollup = require ( "rollup" ) ;
64const chalk = require ( "chalk" ) ;
7- const webpack = require ( "webpack" ) ;
8- const webpackConfig = require ( "./webpack.conf.js" ) ;
9- const merge = require ( "webpack-merge" ) ;
10- const config = require ( "./config" ) ;
11-
12- let isModern = false ;
13- let isOnly = false ;
14-
15- process . argv . forEach ( item => {
16- if ( item . includes ( "modern" ) ) {
17- isModern = true ;
18- }
19-
20- if ( item . includes ( "only" ) ) {
21- isOnly = true ;
5+ const path = require ( "path" ) ;
6+ const json = require ( "@rollup/plugin-json" ) ;
7+ const { nodeResolve } = require ( "@rollup/plugin-node-resolve" ) ;
8+ const { terser } = require ( "rollup-plugin-terser" ) ;
9+ const { default : babel , getBabelOutputPlugin } = require ( "@rollup/plugin-babel" ) ;
10+ const cjs = require ( "@rollup/plugin-commonjs" ) ;
11+ const pkg = require ( "../package.json" ) ;
12+ const { DEFAULT_EXTENSIONS } = require ( "@babel/core" ) ;
13+ const replace = require ( "@rollup/plugin-replace" ) ;
14+
15+ const deps = [ "vue" , ...Object . keys ( Object . assign ( { } , pkg . dependencies ) ) ] ;
16+ const foldPath = path . resolve ( __dirname , `..` ) ;
17+ const input = path . resolve ( foldPath , "src/index.js" ) ;
18+ const outputConfig = {
19+ esm : {
20+ format : "esm" ,
21+ file : path . resolve ( foldPath , `dist/${ pkg . name } .esm.js` )
22+ } ,
23+ umd : {
24+ format : "umd" ,
25+ file : path . resolve ( foldPath , `dist/${ pkg . name } .min.js` ) ,
26+ name : "CountTo" ,
27+ globals : {
28+ vue : "Vue"
29+ } ,
30+ exports : "named"
2231 }
23- } ) ;
24-
25- let spinner ;
26-
27- function logStart ( str = "" ) {
28- spinner = ora ( `Building ${ str } bundle for production...` ) ;
29-
30- spinner . start ( ) ;
31- }
32-
33- function build ( webpackConfig , str ) {
34- return new Promise ( function ( resolve , reject ) {
35- logStart ( str ) ;
36-
37- webpack ( webpackConfig , function ( err , stats ) {
38- spinner . stop ( ) ;
39- if ( err ) {
40- process . exit ( 1 ) ;
41-
42- throw err ;
32+ } ;
33+ const arguments = process . argv . splice ( 2 ) ;
34+ const isDebug = arguments . includes ( 'debug' ) ;
35+ const commonExtensions = [ ".ts" , ".tsx" , ".vue" ] ;
36+
37+ const runBuild = async ( ) => {
38+ const outputKeyList = Object . keys ( outputConfig ) ;
39+ let index = 0 ;
40+
41+ build ( outputKeyList [ index ] ) ;
42+
43+ async function build ( name ) {
44+ if ( ! name ) return ;
45+ const extTerserOpt =
46+ name === "esm"
47+ ? {
48+ compress : {
49+ pure_getters : true
50+ } ,
51+ ecma : 2015
52+ }
53+ : { } ;
54+
55+ const extPlugins = [
56+ ...( isDebug ? [ ] : [ terser (
57+ Object . assign (
58+ {
59+ mangle : false ,
60+ toplevel : true ,
61+ safari10 : true ,
62+ format : {
63+ comments : false ,
64+ } ,
65+ } ,
66+ extTerserOpt
67+ )
68+ ) ] ) ,
69+ ...( name === "esm" ? [ ] : [
70+ cjs ( {
71+ // 开启混合模式转换
72+ transformMixedEsModules : true ,
73+ sourceMap : true
74+ } ) ,
75+ ] )
76+ ] ;
77+ const outOptions = Object . assign (
78+ outputConfig [ name ] ,
79+ {
80+ sourcemap : true
4381 }
44-
45- if ( stats . hasErrors ( ) ) {
46- console . log ( stats . toString ( {
47- colors : true
48- } ) ) ;
49-
50- console . log ( chalk . red ( "\nBuild failed with errors.\n" ) ) ;
51-
52- process . exit ( 1 ) ;
82+ ) ;
83+ const inputOptions = {
84+ input,
85+ plugins : [
86+ replace ( {
87+ "process.env.NODE_ENV" : JSON . stringify ( "production" ) ,
88+ preventAssignment : true
89+ } ) ,
90+ nodeResolve ( {
91+ extensions : [ ".mjs" , ".js" , ".json" , ".node" , ...commonExtensions ]
92+ } ) ,
93+ json ( ) ,
94+ vue ( ) ,
95+ // cjs({
96+ // // 开启混合模式转换
97+ // transformMixedEsModules: true,
98+ // sourceMap: true
99+ // }),
100+ ...extPlugins ,
101+ babel ( {
102+ babelHelpers : "runtime" ,
103+ extensions : [ ...DEFAULT_EXTENSIONS , ...commonExtensions ]
104+ } ) ,
105+ ] ,
106+ external ( id ) {
107+ return name === "umd"
108+ ? / ^ v u e $ / . test ( id )
109+ : deps . some ( k => {
110+ return new RegExp ( "^" + k ) . test ( id ) ;
111+ } ) ;
53112 }
54-
55- resolve ( ) ;
56- } ) ;
57- } ) ;
58- }
113+ } ;
59114
60- ( async function ( ) {
61- rm (
62- config . output . path ,
63- async err => {
64- if ( err ) {
65- spinner . stop ( ) ;
115+ console . log ( chalk . blue ( input + " → " + outOptions . file + "..." ) ) ;
66116
67- process . exit ( 1 ) ;
68- throw err ;
69- }
70- let startTime = Date . now ( ) ;
71-
72- await build ( webpackConfig ) ;
117+ try {
118+ const str = chalk . green ( "create " + outOptions . file + " done" ) ;
119+ console . time ( str ) ;
120+ const bundle = await rollup . rollup ( inputOptions ) ;
121+ await bundle . generate ( outOptions ) ;
122+ await bundle . write ( outOptions ) ;
123+ index ++ ;
73124
74- console . log (
75- chalk . green ( "Build complete in " + ( Date . now ( ) - startTime ) + "ms.\n" )
76- ) ;
125+ console . timeEnd ( str ) ;
126+ if ( index < outputKeyList . length ) {
127+ await build ( outputKeyList [ index ] ) ;
128+ }
129+ } catch ( e ) {
130+ console . error ( e ) ;
131+ process . exit ;
77132 }
78- ) ;
79- } ) ( ) ;
133+ }
134+ } ;
135+
136+ runBuild ( ) ;
0 commit comments