1
1
const path = require ( 'path' )
2
2
3
- module . exports = ( api , { entry, name, dest } ) => {
4
- const libName = name || api . service . pkg . name || entry . replace ( / \. ( j s | v u e ) $ / , '' )
5
- if ( libName . indexOf ( '-' ) < 0 ) {
6
- const { log, error } = require ( '@vue/cli-shared-utils' )
3
+ module . exports = ( api , { target, entry, name, dest, prefix } ) => {
4
+ const { log, error } = require ( '@vue/cli-shared-utils' )
5
+ const abort = msg => {
7
6
log ( )
8
- error ( `--name must contain a hyphen when building as web-component. (got " ${ libName } ")` )
7
+ error ( msg )
9
8
process . exit ( 1 )
10
9
}
11
10
11
+ const libName = name || api . service . pkg . name || entry . replace ( / \. ( j s | v u e ) $ / , '' )
12
+ if ( libName . indexOf ( '-' ) < 0 && target !== 'multi-wc' ) {
13
+ abort ( `--name must contain a hyphen with --target web-component. (got "${ libName } ")` )
14
+ }
15
+
16
+ let dynamicEntry
17
+ if ( target === 'multi-wc' ) {
18
+ if ( ! entry ) {
19
+ abort ( `a glob pattern is required with --target multi-web-component.` )
20
+ }
21
+ // generate dynamic entry based on glob files
22
+ const files = require ( 'globby' ) . sync ( [ entry ] , { cwd : api . resolve ( '.' ) } )
23
+ if ( ! files . length ) {
24
+ abort ( `glob pattern "${ entry } " did not match any files.` )
25
+ }
26
+ dynamicEntry = require ( './generateMultiWcEntry' ) ( libName , files )
27
+ }
28
+
12
29
// setting this disables app-only configs
13
30
process . env . VUE_CLI_TARGET = 'web-component'
14
31
// inline all static asset files since there is no publicPath handling
@@ -20,18 +37,22 @@ module.exports = (api, { entry, name, dest }) => {
20
37
const config = api . resolveChainableWebpackConfig ( )
21
38
22
39
config . entryPoints . clear ( )
40
+
23
41
// set proxy entry for *.vue files
24
- if ( / \. v u e $ / . test ( entry ) ) {
42
+ if ( target === 'multi-wc' ) {
25
43
config
26
- . entry ( `${ libName } ${ minify ? `.min` : `` } ` )
27
- . add ( require . resolve ( './entry-web-component.js' ) )
44
+ . entry ( `${ libName } ${ minify ? `.min` : `` } ` )
45
+ . add ( dynamicEntry )
28
46
config . resolve
29
- . alias
30
- . set ( '~entry ' , api . resolve ( entry ) )
47
+ . alias
48
+ . set ( '~root ' , api . resolve ( '.' ) )
31
49
} else {
32
50
config
33
- . entry ( `${ libName } ${ minify ? `.min` : `` } ` )
34
- . add ( api . resolve ( entry ) )
51
+ . entry ( `${ libName } ${ minify ? `.min` : `` } ` )
52
+ . add ( require . resolve ( './entry-wc.js' ) )
53
+ config . resolve
54
+ . alias
55
+ . set ( '~entry' , api . resolve ( entry ) )
35
56
}
36
57
37
58
// only minify min entry
@@ -70,7 +91,7 @@ module.exports = (api, { entry, name, dest }) => {
70
91
config
71
92
. plugin ( 'demo-html' )
72
93
. use ( require ( 'html-webpack-plugin' ) , [ {
73
- template : path . resolve ( __dirname , './demo-web-component .html' ) ,
94
+ template : path . resolve ( __dirname , './demo-wc .html' ) ,
74
95
inject : false ,
75
96
filename : 'demo.html' ,
76
97
libName
0 commit comments