@@ -283,34 +283,43 @@ module.exports = function (content) {
283283
284284 // add requires for styles
285285 if ( parts . styles . length ) {
286- var styleInjectionCode = 'function __injectVueStyle__ () {\n'
286+ var styleInjectionCode =
287+ 'function __injectVueStyle__ () {\n'
287288 var cssModules = { }
288289 parts . styles . forEach ( function ( style , i ) {
289290 // require style
290291 var requireString = style . src
291292 ? getRequireForImport ( 'styles' , style , style . scoped )
292293 : getRequire ( 'styles' , style , i , style . scoped )
293294
295+ var hasStyleLoader = requireString . indexOf ( 'style-loader' ) > - 1
296+ var hasVueStyleLoader = requireString . indexOf ( 'vue-style-loader' ) > - 1
297+ // vue-style-loader exposes inject functions during SSR so they are
298+ // always called
299+ var invokeStyle = isServer && hasVueStyleLoader
300+ ? code => `;(${ code } ).__inject__()`
301+ : code => code
302+
294303 var moduleName = ( style . module === true ) ? '$style' : style . module
295304 // setCssModule
296305 if ( moduleName ) {
297306 if ( moduleName in cssModules ) {
298307 loaderContext . emitError ( 'CSS module name "' + moduleName + '" is not unique!' )
299- styleInjectionCode += requireString
308+ styleInjectionCode += invokeStyle ( requireString ) + '\n'
300309 } else {
301310 cssModules [ moduleName ] = true
302311
303312 // `(vue-)style-loader` exposes the name-to-hash map directly
304313 // `css-loader` exposes it in `.locals`
305314 // add `.locals` if the user configured to not use style-loader.
306- if ( requireString . indexOf ( 'style-loader' ) < 0 ) {
315+ if ( ! hasStyleLoader ) {
307316 requireString += '.locals'
308317 }
309318
310- styleInjectionCode += 'this["' + moduleName + '"] = ' + requireString + '\n'
319+ styleInjectionCode += invokeStyle ( 'this["' + moduleName + '"] = ' + requireString ) + '\n'
311320 }
312321 } else {
313- styleInjectionCode += requireString + '\n'
322+ styleInjectionCode += invokeStyle ( requireString ) + '\n'
314323 }
315324 } )
316325 styleInjectionCode += '}\n'
0 commit comments