1
- module . exports = ( api , { entry, name, keepAlive , shadow } ) => {
1
+ module . exports = ( api , { entry, name, dest , keepAlive } ) => {
2
2
const libName = name || api . service . pkg . name || entry . replace ( / \. ( j s | v u e ) $ / , '' )
3
3
if ( libName . indexOf ( '-' ) < 0 ) {
4
4
const { log, error } = require ( '@vue/cli-shared-utils' )
@@ -11,19 +11,29 @@ module.exports = (api, { entry, name, keepAlive, shadow }) => {
11
11
process . env . VUE_CLI_TARGET = 'web-component'
12
12
// inline all static asset files since there is no publicPath handling
13
13
process . env . VUE_CLI_INLINE_LIMIT = Infinity
14
+ // Disable CSS extraction and turn on CSS shadow mode for vue-style-loader
15
+ process . env . VUE_CLI_CSS_SHADOW_MODE = true
14
16
15
17
api . chainWebpack ( config => {
18
+ config . entryPoints . clear ( )
19
+ // set proxy entry for *.vue files
20
+ if ( / \. v u e $ / . test ( entry ) ) {
21
+ config
22
+ . entry ( libName )
23
+ . add ( require . resolve ( './entry-web-component.js' ) )
24
+ config . resolve
25
+ . alias
26
+ . set ( '~entry' , api . resolve ( entry ) )
27
+ } else {
28
+ config
29
+ . entry ( libName )
30
+ . add ( api . resolve ( entry ) )
31
+ }
32
+
16
33
config . output
34
+ . path ( api . resolve ( dest ) )
17
35
. filename ( `[name].js` )
18
36
19
- // only minify min entry
20
- config
21
- . plugin ( 'uglify' )
22
- . tap ( args => {
23
- args [ 0 ] . include = / \. m i n \. j s $ /
24
- return args
25
- } )
26
-
27
37
// externalize Vue in case user imports it
28
38
config
29
39
. externals ( {
@@ -35,37 +45,19 @@ module.exports = (api, { entry, name, keepAlive, shadow }) => {
35
45
. use ( require ( 'webpack/lib/DefinePlugin' ) , [ {
36
46
'process.env' : {
37
47
CUSTOM_ELEMENT_NAME : JSON . stringify ( libName ) ,
38
- CUSTOM_ELEMENT_KEEP_ALIVE : keepAlive ,
39
- CUSTOM_ELEMENT_USE_SHADOW_DOM : shadow
48
+ CUSTOM_ELEMENT_KEEP_ALIVE : keepAlive
40
49
}
41
50
} ] )
42
51
43
- // TODO handle CSS (insert in shadow DOM)
52
+ // enable shadow mode in vue-loader
53
+ config . module
54
+ . rule ( 'vue' )
55
+ . use ( 'vue-loader' )
56
+ . tap ( options => {
57
+ options . shadowMode = true
58
+ return options
59
+ } )
44
60
} )
45
61
46
- function genConfig ( postfix ) {
47
- postfix = postfix ? `.${ postfix } ` : ``
48
- api . chainWebpack ( config => {
49
- config . entryPoints . clear ( )
50
- // set proxy entry for *.vue files
51
- if ( / \. v u e $ / . test ( entry ) ) {
52
- config
53
- . entry ( `${ libName } ${ postfix } ` )
54
- . add ( require . resolve ( './entry-web-component.js' ) )
55
- config . resolve
56
- . alias
57
- . set ( '~entry' , api . resolve ( entry ) )
58
- } else {
59
- config
60
- . entry ( `${ libName } ${ postfix } ` )
61
- . add ( api . resolve ( entry ) )
62
- }
63
- } )
64
- return api . resolveWebpackConfig ( )
65
- }
66
-
67
- return [
68
- genConfig ( '' ) ,
69
- genConfig ( 'min' )
70
- ]
62
+ return api . resolveWebpackConfig ( )
71
63
}
0 commit comments