1- module . exports = ( api , { entry, name, keepAlive , shadow } ) => {
1+ module . exports = ( api , { entry, name, dest , keepAlive } ) => {
22 const libName = name || api . service . pkg . name || entry . replace ( / \. ( j s | v u e ) $ / , '' )
33 if ( libName . indexOf ( '-' ) < 0 ) {
44 const { log, error } = require ( '@vue/cli-shared-utils' )
@@ -11,19 +11,29 @@ module.exports = (api, { entry, name, keepAlive, shadow }) => {
1111 process . env . VUE_CLI_TARGET = 'web-component'
1212 // inline all static asset files since there is no publicPath handling
1313 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
1416
1517 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+
1633 config . output
34+ . path ( api . resolve ( dest ) )
1735 . filename ( `[name].js` )
1836
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-
2737 // externalize Vue in case user imports it
2838 config
2939 . externals ( {
@@ -35,37 +45,19 @@ module.exports = (api, { entry, name, keepAlive, shadow }) => {
3545 . use ( require ( 'webpack/lib/DefinePlugin' ) , [ {
3646 'process.env' : {
3747 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
4049 }
4150 } ] )
4251
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+ } )
4460 } )
4561
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 ( )
7163}
0 commit comments