11var loaderUtils = require ( 'loader-utils' )
22var assign = require ( 'object-assign' )
33var parse = require ( './parser' )
4- var selectorPath = require . resolve ( './selector' )
54var hash = require ( 'hash-sum' )
65var path = require ( 'path' )
76
@@ -12,15 +11,12 @@ var defaultLang = {
1211}
1312
1413var rewriterInjectRE = / \b ( c s s ( - l o a d e r ) ? ( \? [ ^ ! ] + ) ? ) (?: ! | $ ) /
15- var rewriters = {
16- styles : require . resolve ( './style-rewriter' )
17- }
18-
19- var templateLoader = require . resolve ( './template-loader' )
14+ var selectorPath = 'vue-loader/lib/selector'
15+ var templateLoader = 'vue-loader/lib/template-loader'
2016
2117module . exports = function ( content ) {
2218 var defaultLoaders = {
23- html : require . resolve ( './ template-compiler') ,
19+ html : 'vue-loader/lib/ template-compiler',
2420 css : 'vue-style-loader!css-loader' ,
2521 js : 'babel-loader?presets[]=es2015&plugins[]=transform-runtime&comments=false'
2622 }
@@ -32,6 +28,7 @@ module.exports = function (content) {
3228 var filePath = this . resourcePath
3329 var fileName = path . basename ( filePath )
3430 var moduleId = '_v-' + hash ( filePath )
31+ var styleRewriter = 'vue-loader/lib/style-rewriter?id=' + moduleId
3532
3633 // respect user babel options
3734 if ( this . options . babel ) {
@@ -88,7 +85,7 @@ module.exports = function (content) {
8885 function getLoaderString ( type , part , scoped ) {
8986 var lang = part . lang || defaultLang [ type ]
9087 var loader = loaders [ lang ]
91- var rewriter = getRewriter ( type , scoped )
88+ var rewriter = type === 'styles' ? styleRewriter + ( scoped ? '&scoped=true!' : '!' ) : ''
9289 var injectString = ( type === 'script' && query . inject ) ? 'inject!' : ''
9390 if ( loader !== undefined ) {
9491 // inject rewriter before css/html loader for
@@ -114,18 +111,6 @@ module.exports = function (content) {
114111 }
115112 }
116113
117- function getRewriter ( type , scoped ) {
118- var meta = '?id=' + moduleId
119- switch ( type ) {
120- case 'template' :
121- return scoped ? ( rewriters . template + meta + '!' ) : ''
122- case 'style' :
123- return rewriters . style + ( scoped ? meta + '&scoped=true!' : '!' )
124- default :
125- return ''
126- }
127- }
128-
129114 function getSelectorString ( type , index ) {
130115 return selectorPath +
131116 '?type=' + type +
@@ -141,13 +126,13 @@ module.exports = function (content) {
141126 }
142127
143128 var parts = parse ( content , fileName , this . sourceMap )
144- var hasLocalStyles = false
129+ var hasScoped = false
145130 var output = ''
146131
147132 // add requires for styles
148133 parts . styles . forEach ( function ( style , i ) {
149134 var scoped = style . scoped
150- if ( scoped ) hasLocalStyles = true
135+ if ( scoped ) hasScoped = true
151136 output += style . src
152137 ? getRequireForImport ( 'styles' , style . src , scoped )
153138 : getRequire ( 'styles' , style , i , scoped )
@@ -184,8 +169,8 @@ module.exports = function (content) {
184169 if ( template ) {
185170 output += 'var __vue_template__ = ' + (
186171 template . src
187- ? getRequireForImport ( 'template' , template , hasLocalStyles )
188- : getRequire ( 'template' , template , null , hasLocalStyles )
172+ ? getRequireForImport ( 'template' , template )
173+ : getRequire ( 'template' , template )
189174 )
190175 // attach render functions to exported options
191176 exports +=
@@ -194,6 +179,10 @@ module.exports = function (content) {
194179 ': __exports__)\n' +
195180 '__vue_options__.render = __vue_template__.render\n' +
196181 '__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n'
182+ // attach scoped id
183+ if ( hasScoped ) {
184+ exports += '__vue_options__._scopeId = "' + moduleId + '"\n'
185+ }
197186 }
198187
199188 if ( ! query . inject ) {
0 commit comments