1
1
const defaults = require ( 'lodash.defaultsdeep' )
2
2
const hash = require ( 'hash-sum' )
3
3
4
- const genId = require ( './gen-id' )
5
-
6
4
const DISPOSED = 'disposed'
7
5
const INJECT_STYLE_FN = 'injectStyle'
8
6
const CSS_MODULES = 'cssModules'
@@ -13,12 +11,12 @@ function _s (any) {
13
11
14
12
// eslint-disable-next-line camelcase
15
13
function __vue_type__ ( type , id , esModule , addPrefix = true ) {
16
- let output = ' \n/* script */\n'
14
+ let output = addPrefix ? ` \n/* ${ type } */\n` : ' '
17
15
if ( id ) {
18
16
if ( esModule ) {
19
- output += `import __vue_${ type } __ from ${ id } \n`
17
+ output += `import __vue_${ type } __ from ${ _s ( id ) } \n`
20
18
} else {
21
- output += `var __vue_${ type } __ = ${ id } \n`
19
+ output += `var __vue_${ type } __ = require( ${ _s ( id ) } ) \n`
22
20
}
23
21
} else {
24
22
output += `var __vue_${ type } __ = null\n`
@@ -27,14 +25,14 @@ function __vue_type__ (type, id, esModule, addPrefix = true) {
27
25
}
28
26
29
27
module . exports = function assemble ( source , filename , config ) {
30
- config = defaults ( config , {
28
+ config = defaults ( { } , config , {
31
29
esModule : true ,
32
30
shortFilePath : filename ,
33
31
require : {
34
32
vueHotReloadAPI : 'vue-hot-reload-api' ,
35
33
normalizeComponent : 'vue-component-compiler/src/normalize-component.js'
36
34
} ,
37
- moduleId : null ,
35
+ scopeId : null ,
38
36
moduleIdentifier : config . moduleIdentifier || hash ( _s ( { filename, config } ) ) , // require for server. TODO: verify this is correct.
39
37
isHot : false ,
40
38
isServer : false ,
@@ -58,15 +56,15 @@ module.exports = function assemble (source, filename, config) {
58
56
let styleInjectionCode = `function ${ INJECT_STYLE_FN } (ssrContext) {\n`
59
57
60
58
if ( needsHotReload ) styleInjectionCode += `if (${ DISPOSED } ) return`
61
- if ( config . isServer ) styleInjectionCode += 'var i\n'
59
+ if ( config . isServer ) styleInjectionCode += ' var i\n'
62
60
63
61
styles . forEach ( ( style , i ) => {
64
62
const invokeStyle = config . isServer && config . hasStyleInjectFn
65
- ? code => `;i=${ code } ,i.__inject__&&i.__inject__(ssrContext),i)\n`
63
+ ? code => ` ;i=${ code } ,i.__inject__&&i.__inject__(ssrContext),i)\n`
66
64
: code => ` ${ code } \n`
67
65
68
66
const moduleName = ( style . descriptor . module === true ) ? '$style' : style . descriptor . module
69
- const requireString = `require(${ _s ( style . id ) } `
67
+ const requireString = `require(${ _s ( style . id ) } ) `
70
68
71
69
if ( moduleName ) {
72
70
if ( ! cssModules ) {
@@ -92,7 +90,7 @@ module.exports = function assemble (source, filename, config) {
92
90
`Object.defineProperty(this, ${ MODULE_KEY } , { get: function () { return ${ CSS_MODULES } [${ MODULE_KEY } ] }})\n`
93
91
94
92
output +=
95
- `module.hot && module.hot.accept([${ style . hotPath } ], function () {\n` +
93
+ `module.hot && module.hot.accept([${ _s ( style . hotPath || style . id ) } ], function () {\n` +
96
94
// 1. check if style has been injected
97
95
` var oldLocals = ${ CSS_MODULES } [${ MODULE_KEY } ]\n` +
98
96
` if (!oldLocals) return\n` +
@@ -123,31 +121,33 @@ module.exports = function assemble (source, filename, config) {
123
121
// scopeId,
124
122
// moduleIdentifier (server only)
125
123
// )
126
- output += `var normalizeComponent = require(${ _s ( config . require . normalizeComponent ) } )\n`
124
+ output += config . esModule
125
+ ? `import normalizeComponent from ${ _s ( config . require . normalizeComponent ) } \n`
126
+ : `var normalizeComponent = require(${ _s ( config . require . normalizeComponent ) } )\n`
127
127
// <script>
128
128
output += __vue_type__ ( 'script' , script . id , config . esModule )
129
129
if ( config . isInjectable ) {
130
130
output +=
131
- `if (__vue_script__) {__vue_script__ = __vue_script__(injections) } \n`
131
+ `if (__vue_script__) { __vue_script__ = __vue_script__(injections) }\n`
132
132
}
133
133
134
134
// <template>
135
135
output += __vue_type__ ( 'template' , render . id , config . esModule )
136
136
137
137
// style
138
- output += '/* styles */\n'
138
+ output += '\n /* styles */\n'
139
139
output += 'var __vue_styles__ = ' + ( styles . length ? 'injectStyle' : 'null' ) + '\n'
140
140
141
141
// scopeId
142
- output += '/* scopeId */\n'
143
- output += 'var __vue_scopeId__ = ' + ( hasScoped ? _s ( config . moduleId ) : 'null' ) + '\n'
142
+ output += '\n /* scopeId */\n'
143
+ output += 'var __vue_scopeId__ = ' + ( hasScoped ? _s ( config . scopeId ) : 'null' ) + '\n'
144
144
145
145
// moduleIdentifier (server only)
146
- output += '/* moduleIdentifier (server only) */\n'
146
+ output += '\n /* moduleIdentifier (server only) */\n'
147
147
output += 'var __vue_module_identifier__ = ' + ( config . isServer ? _s ( config . moduleIdentifier ) : 'null' ) + '\n'
148
148
149
149
// close normalizeComponent call
150
- output += 'var Component = normalizeComponent(\n' +
150
+ output += '\nvar Component = normalizeComponent(\n' +
151
151
' __vue_script__,\n' +
152
152
' __vue_template__,\n' +
153
153
' __vue_styles__,\n' +
@@ -161,19 +161,19 @@ module.exports = function assemble (source, filename, config) {
161
161
output += `Component.options.__file = ${ _s ( config . shortFilePath ) } \n`
162
162
// check named exports
163
163
output +=
164
- ' if (Component.esModule && Object.keys(Component.esModule).some(function (key) {' +
165
- ' return key !== "default" && key.substr(0, 2) !== "__"' +
166
- ' })) {' +
167
- ' console.error("named exports are not supported in *.vue files.")' +
168
- ' }\n'
164
+ ` if (Component.esModule && Object.keys(Component.esModule).some(function (key) {\n` +
165
+ ` return key !== "default" && key.substr(0, 2) !== "__"\n` +
166
+ ` })) {\n` +
167
+ ` console.error("named exports are not supported in *.vue files.")\n` +
168
+ ` }\n`
169
169
// check functional components used with templates
170
170
if ( render . id ) {
171
171
output +=
172
- 'if (Component.options.functional) {' +
173
- ' console.error("' +
172
+ 'if (Component.options.functional) {\n ' +
173
+ ' console.error("' +
174
174
'[vue-loader] ' + filename + ': functional components are not ' +
175
175
'supported with templates, they should use render functions.' +
176
- '")}\n'
176
+ '")\n }\n'
177
177
}
178
178
}
179
179
@@ -182,14 +182,14 @@ module.exports = function assemble (source, filename, config) {
182
182
customBlocks . forEach ( ( customBlock , i ) => {
183
183
const TYPE = `customBlock_${ customBlock . descriptor . type } _${ i } `
184
184
const BLOCK = `__vue_${ TYPE } __`
185
- output += __vue_type__ ( TYPE , customBlock . id , config . esModule , addedPrefix )
185
+ if ( ! addedPrefix ) output += `\n/* Custom Blocks */\n`
186
+ output += __vue_type__ ( TYPE , customBlock . id , config . esModule , false )
186
187
output += `if (typeof ${ BLOCK } === 'function') { ${ BLOCK } (Component) }\n`
187
188
addedPrefix = true
188
189
} )
189
- output += '\n'
190
190
}
191
191
192
- if ( config . isInjectable ) {
192
+ if ( ! config . isInjectable ) {
193
193
if ( needsHotReload ) {
194
194
output +=
195
195
`\n/* hot reload */\n` +
@@ -233,10 +233,14 @@ module.exports = function assemble (source, filename, config) {
233
233
} else {
234
234
output =
235
235
`\n/* dependency injection */\n` +
236
- `module.exports = function (injections) {\n${ output } \n` +
236
+ `module.exports = function (injections) {\n${ pad ( output ) } \n` +
237
237
` return Component.exports\n` +
238
238
`}\n`
239
239
}
240
240
241
241
return output
242
242
}
243
+
244
+ function pad ( content ) {
245
+ return content . split ( '\n' ) . map ( line => ' ' + line ) . join ( '\n' )
246
+ }
0 commit comments