@@ -8,16 +8,90 @@ const rm = require('rimraf')
88const path = require ( 'path' )
99const chalk = require ( 'chalk' )
1010const webpack = require ( 'webpack' )
11+ const merge = require ( 'webpack-merge' )
12+ const ExtractTextPlugin = require ( 'extract-text-webpack-plugin' )
13+ const OptimizeCSSPlugin = require ( 'optimize-css-assets-webpack-plugin' )
14+ const UglifyJsPlugin = require ( 'uglifyjs-webpack-plugin' )
1115const config = require ( '../config' )
12- const webpackConfig = require ( './webpack.prod .conf' )
13-
16+ const vueLoaderConfig = require ( './vue-loader .conf' )
17+ const env = require ( '../config/prod.env' )
1418const spinner = ora ( 'building for production...' )
1519
20+ config . build . assetsRoot = path . resolve ( __dirname , '../dist' )
1621config . build . assetsSubDirectory = '/'
1722
18- // webpackConfig.output = {
23+ function resolve ( dir ) {
24+ return path . join ( __dirname , '..' , dir )
25+ }
26+
27+ const webpackBaseConfig = {
28+ output : {
29+ path : config . build . assetsRoot
30+ } ,
31+ devtool : config . build . productionSourceMap ? config . build . devtool : false ,
32+ resolve : {
33+ extensions : [ '.js' , '.vue' , '.json' ]
34+ } ,
35+ module : {
36+ rules : [
37+ {
38+ test : / \. v u e $ / ,
39+ loader : 'vue-loader' ,
40+ options : vueLoaderConfig
41+ } ,
42+ {
43+ test : / \. j s $ / ,
44+ loader : 'babel-loader' ,
45+ include : [ resolve ( 'src' ) , resolve ( 'test' ) , resolve ( 'node_modules/webpack-dev-server/client' ) ]
46+ }
47+ ]
48+ } ,
49+ plugins : [
50+ new webpack . DefinePlugin ( {
51+ 'process.env' : env
52+ } ) ,
53+
54+ new UglifyJsPlugin ( {
55+ uglifyOptions : {
56+ compress : {
57+ warnings : false
58+ }
59+ } ,
60+ sourceMap : config . build . productionSourceMap ,
61+ parallel : true
62+ } ) ,
63+
64+ new ExtractTextPlugin ( {
65+ filename : `css/vue-bootstrap-selectpicker.min.css` ,
66+ allChunks : true
67+ } ) ,
1968
20- // }
69+ new OptimizeCSSPlugin ( {
70+ cssProcessorOptions : config . build . productionSourceMap
71+ ? { safe : true , map : { inline : false } }
72+ : { safe : true }
73+ } )
74+ ]
75+ }
76+ const webpackConfig = [
77+ merge ( webpackBaseConfig , {
78+ entry : path . resolve ( `./src/components/SelectPicker.vue` ) ,
79+ output : {
80+ filename : 'js/vue-bootstrap-selectpicker.js' ,
81+ library : 'SelectPicker' ,
82+ libraryTarget : 'window'
83+ }
84+ } ) ,
85+ merge ( webpackBaseConfig , {
86+ entry : path . resolve ( `./src/components/index.js` ) ,
87+ output : {
88+ filename : 'js/vue-bootstrap-selectpicker.min.js' ,
89+ library : 'select-picker' ,
90+ libraryTarget : 'umd' ,
91+ umdNamedDefine : true
92+ }
93+ } )
94+ ]
2195
2296spinner . start ( )
2397
@@ -39,10 +113,6 @@ rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
39113 process . exit ( 1 )
40114 }
41115
42- console . log ( chalk . cyan ( ' Build complete.\n' ) )
43- console . log ( chalk . yellow (
44- ' Tip: built files are meant to be served over an HTTP server.\n' +
45- ' Opening index.html over file:// won\'t work.\n'
46- ) )
116+ console . log ( chalk . green ( ' Build complete.\n' ) )
47117 } )
48118} )
0 commit comments