1
+ const path = require ( 'path' )
2
+
1
3
module . exports = ( api , { entry, name, dest } , options ) => {
2
4
const libName = name || api . service . pkg . name || entry . replace ( / \. ( j s | v u e ) $ / , '' )
3
5
// setting this disables app-only configs
4
6
process . env . VUE_CLI_TARGET = 'lib'
5
7
// inline all static asset files since there is no publicPath handling
6
8
process . env . VUE_CLI_INLINE_LIMIT = Infinity
7
9
8
- api . chainWebpack ( config => {
10
+ function genConfig ( format , postfix = format , genHTML ) {
11
+ const config = api . resolveChainableWebpackConfig ( )
12
+
13
+ config . entryPoints . clear ( )
14
+ // set proxy entry for *.vue files
15
+ if ( / \. v u e $ / . test ( entry ) ) {
16
+ config
17
+ . entry ( `${ libName } .${ postfix } ` )
18
+ . add ( require . resolve ( './entry-lib.js' ) )
19
+ config . resolve
20
+ . alias
21
+ . set ( '~entry' , api . resolve ( entry ) )
22
+ } else {
23
+ config
24
+ . entry ( `${ libName } .${ postfix } ` )
25
+ . add ( api . resolve ( entry ) )
26
+ }
27
+
9
28
config . output
10
29
. path ( api . resolve ( dest ) )
11
30
. filename ( `[name].js` )
12
31
. library ( libName )
13
32
. libraryExport ( 'default' )
33
+ . libraryTarget ( format )
14
34
15
- // adjust css output name
35
+ // adjust css output name so they write to the same file
16
36
if ( options . css . extract !== false ) {
17
37
config
18
38
. plugin ( 'extract-css' )
@@ -23,12 +43,9 @@ module.exports = (api, { entry, name, dest }, options) => {
23
43
}
24
44
25
45
// only minify min entry
26
- config
27
- . plugin ( 'uglify' )
28
- . tap ( args => {
29
- args [ 0 ] . include = / \. m i n \. j s $ /
30
- return args
31
- } )
46
+ if ( ! / \. m i n / . test ( postfix ) ) {
47
+ config . plugins . delete ( 'uglify' )
48
+ }
32
49
33
50
// externalize Vue in case user imports it
34
51
config
@@ -39,34 +56,25 @@ module.exports = (api, { entry, name, dest }, options) => {
39
56
root : 'Vue'
40
57
}
41
58
} )
42
- } )
43
59
44
- function genConfig ( format , postfix = format ) {
45
- api . chainWebpack ( config => {
46
- config . entryPoints . clear ( )
47
- // set proxy entry for *.vue files
48
- if ( / \. v u e $ / . test ( entry ) ) {
49
- config
50
- . entry ( `${ libName } .${ postfix } ` )
51
- . add ( require . resolve ( './entry-lib.js' ) )
52
- config . resolve
53
- . alias
54
- . set ( '~entry' , api . resolve ( entry ) )
55
- } else {
56
- config
57
- . entry ( `${ libName } .${ postfix } ` )
58
- . add ( api . resolve ( entry ) )
59
- }
60
+ // inject demo page for umd
61
+ if ( genHTML ) {
62
+ config
63
+ . plugin ( 'demo-html' )
64
+ . use ( require ( 'html-webpack-plugin' ) , [ {
65
+ template : path . resolve ( __dirname , './demo-lib.html' ) ,
66
+ inject : false ,
67
+ filename : 'demo.html' ,
68
+ libName
69
+ } ] )
70
+ }
60
71
61
- config . output
62
- . libraryTarget ( format )
63
- } )
64
- return api . resolveWebpackConfig ( )
72
+ return config . toConfig ( )
65
73
}
66
74
67
75
return [
68
76
genConfig ( 'commonjs2' , 'common' ) ,
69
- genConfig ( 'umd' ) ,
77
+ genConfig ( 'umd' , undefined , true ) ,
70
78
genConfig ( 'umd' , 'umd.min' )
71
79
]
72
80
}
0 commit comments