@@ -21,8 +21,11 @@ loaderApi.pitch = function loader(request) {
21
21
: typeof options . insert === 'string'
22
22
? JSON . stringify ( options . insert )
23
23
: options . insert . toString ( ) ;
24
-
25
24
const injectType = options . injectType || 'styleTag' ;
25
+ const esModule =
26
+ typeof options . esModule !== 'undefined' ? options . esModule : false ;
27
+
28
+ delete options . esModule ;
26
29
27
30
switch ( injectType ) {
28
31
case 'linkTag' : {
@@ -32,13 +35,18 @@ if (module.hot) {
32
35
module.hot.accept(
33
36
${ loaderUtils . stringifyRequest ( this , `!!${ request } ` ) } ,
34
37
function() {
35
- var newContent = require(${ loaderUtils . stringifyRequest (
36
- this ,
37
- `!!${ request } `
38
- ) } );
39
- newContent = newContent.__esModule ? newContent.default : newContent;
40
-
41
- update(newContent);
38
+ ${
39
+ esModule
40
+ ? `update(content);`
41
+ : `var newContent = require(${ loaderUtils . stringifyRequest (
42
+ this ,
43
+ `!!${ request } `
44
+ ) } );
45
+
46
+ newContent = newContent.__esModule ? newContent.default : newContent;
47
+
48
+ update(newContent);`
49
+ }
42
50
}
43
51
);
44
52
@@ -48,18 +56,34 @@ if (module.hot) {
48
56
}`
49
57
: '' ;
50
58
51
- return `var options = ${ JSON . stringify ( options ) } ;
59
+ return `${
60
+ esModule
61
+ ? `import api from ${ loaderUtils . stringifyRequest (
62
+ this ,
63
+ `!${ path . join ( __dirname , 'runtime/injectStylesIntoLinkTag.js' ) } `
64
+ ) } ;
65
+ import content from ${ loaderUtils . stringifyRequest (
66
+ this ,
67
+ `!!${ request } `
68
+ ) } ;`
69
+ : `var api = require(${ loaderUtils . stringifyRequest (
70
+ this ,
71
+ `!${ path . join ( __dirname , 'runtime/injectStylesIntoLinkTag.js' ) } `
72
+ ) } );
73
+ var content = require(${ loaderUtils . stringifyRequest (
74
+ this ,
75
+ `!!${ request } `
76
+ ) } );
77
+
78
+ content = content.__esModule ? content.default : content;`
79
+ }
52
80
53
- options.insert = ${ insert } ;
81
+ var options = ${ JSON . stringify ( options ) } ;
54
82
55
- var content = require(${ loaderUtils . stringifyRequest ( this , `!!${ request } ` ) } );
56
- content = content.__esModule ? content.default : content;
83
+ options.insert = ${ insert } ;
57
84
58
- var api = require(${ loaderUtils . stringifyRequest (
59
- this ,
60
- `!${ path . join ( __dirname , 'runtime/injectStylesIntoLinkTag.js' ) } `
61
- ) } );
62
85
var update = api(content, options);
86
+
63
87
${ hmrCode } `;
64
88
}
65
89
@@ -71,9 +95,9 @@ ${hmrCode}`;
71
95
? `
72
96
if (module.hot) {
73
97
var lastRefs = module.hot.data && module.hot.data.refs || 0;
74
-
98
+
75
99
if (lastRefs) {
76
- exports .use();
100
+ exported .use();
77
101
78
102
if (!content.locals) {
79
103
refs = lastRefs;
@@ -94,42 +118,62 @@ if (module.hot) {
94
118
}`
95
119
: '' ;
96
120
97
- return `var refs = 0;
98
- var dispose;
99
- var content = require(${ loaderUtils . stringifyRequest ( this , `!!${ request } ` ) } );
100
- content = content.__esModule ? content.default : content;
121
+ return `${
122
+ esModule
123
+ ? `import api from ${ loaderUtils . stringifyRequest (
124
+ this ,
125
+ `!${ path . join ( __dirname , 'runtime/injectStylesIntoStyleTag.js' ) } `
126
+ ) } ;
127
+ import content from ${ loaderUtils . stringifyRequest (
128
+ this ,
129
+ `!!${ request } `
130
+ ) } ;`
131
+ : `var api = require(${ loaderUtils . stringifyRequest (
132
+ this ,
133
+ `!${ path . join ( __dirname , 'runtime/injectStylesIntoStyleTag.js' ) } `
134
+ ) } );
135
+ var content = require(${ loaderUtils . stringifyRequest (
136
+ this ,
137
+ `!!${ request } `
138
+ ) } );
139
+
140
+ content = content.__esModule ? content.default : content;
141
+
142
+ if (typeof content === 'string') {
143
+ content = [[module.id, content, '']];
144
+ }`
145
+ }
101
146
147
+ var refs = 0;
148
+ var dispose;
102
149
var options = ${ JSON . stringify ( options ) } ;
103
150
104
151
options.insert = ${ insert } ;
105
152
options.singleton = ${ isSingleton } ;
106
153
107
- if (typeof content === 'string') {
108
- content = [[module.id, content, '']];
109
- }
154
+ var exported = {};
110
155
111
156
if (content.locals) {
112
- exports .locals = content.locals;
157
+ exported .locals = content.locals;
113
158
}
114
159
115
- exports .use = function() {
160
+ exported .use = function() {
116
161
if (!(refs++)) {
117
- var api = require(${ loaderUtils . stringifyRequest (
118
- this ,
119
- `!${ path . join ( __dirname , 'runtime/injectStylesIntoStyleTag.js' ) } `
120
- ) } );
121
162
dispose = api(content, options);
122
163
}
123
164
124
- return exports ;
165
+ return exported ;
125
166
};
126
167
127
- exports .unuse = function() {
168
+ exported .unuse = function() {
128
169
if (refs > 0 && !--refs) {
129
170
dispose();
130
171
dispose = null;
131
172
}
132
173
};
174
+
175
+ ${ esModule ? 'export default' : 'module.exports =' } exported;
176
+
133
177
${ hmrCode }
134
178
` ;
135
179
}
@@ -146,17 +190,22 @@ if (module.hot) {
146
190
module.hot.accept(
147
191
${ loaderUtils . stringifyRequest ( this , `!!${ request } ` ) } ,
148
192
function () {
149
- var newContent = require(${ loaderUtils . stringifyRequest (
150
- this ,
151
- `!!${ request } `
152
- ) } );
153
- newContent = newContent.__esModule ? newContent.default : newContent;
154
-
155
- if (typeof newContent === 'string') {
156
- newContent = [[module.id, newContent, '']];
193
+ ${
194
+ esModule
195
+ ? `update(content);`
196
+ : `var newContent = require(${ loaderUtils . stringifyRequest (
197
+ this ,
198
+ `!!${ request } `
199
+ ) } );
200
+
201
+ newContent = newContent.__esModule ? newContent.default : newContent;
202
+
203
+ if (typeof newContent === 'string') {
204
+ newContent = [[module.id, newContent, '']];
205
+ }
206
+
207
+ update(newContent);`
157
208
}
158
-
159
- update(newContent);
160
209
}
161
210
)
162
211
}
@@ -167,30 +216,44 @@ if (module.hot) {
167
216
}`
168
217
: '' ;
169
218
170
- return `var content = require(${ loaderUtils . stringifyRequest (
171
- this ,
172
- `!!${ request } `
173
- ) } );
174
- content = content.__esModule ? content.default : content;
175
-
176
- if (typeof content === 'string') {
177
- content = [[module.id, content, '']];
178
- }
219
+ return `${
220
+ esModule
221
+ ? `import api from ${ loaderUtils . stringifyRequest (
222
+ this ,
223
+ `!${ path . join ( __dirname , 'runtime/injectStylesIntoStyleTag.js' ) } `
224
+ ) } ;
225
+ import content from ${ loaderUtils . stringifyRequest (
226
+ this ,
227
+ `!!${ request } `
228
+ ) } ;
229
+ var clonedContent = content;`
230
+ : `var api = require(${ loaderUtils . stringifyRequest (
231
+ this ,
232
+ `!${ path . join ( __dirname , 'runtime/injectStylesIntoStyleTag.js' ) } `
233
+ ) } );
234
+ var content = require(${ loaderUtils . stringifyRequest (
235
+ this ,
236
+ `!!${ request } `
237
+ ) } );
238
+
239
+ content = content.__esModule ? content.default : content;
240
+
241
+ if (typeof content === 'string') {
242
+ content = [[module.id, content, '']];
243
+ }`
244
+ }
179
245
180
- var options = ${ JSON . stringify ( options ) }
246
+ var options = ${ JSON . stringify ( options ) } ;
181
247
182
248
options.insert = ${ insert } ;
183
249
options.singleton = ${ isSingleton } ;
184
250
185
- var api = require(${ loaderUtils . stringifyRequest (
186
- this ,
187
- `!${ path . join ( __dirname , 'runtime/injectStylesIntoStyleTag.js' ) } `
188
- ) } );
189
251
var update = api(content, options);
190
252
191
- if (content.locals) {
192
- module.exports = content.locals;
193
- }
253
+ var exported = content.locals ? content.locals : {};
254
+
255
+ ${ esModule ? 'export default' : 'module.exports =' } exported;
256
+
194
257
${ hmrCode } `;
195
258
}
196
259
}
0 commit comments