|
1 | 1 | const { basename, extname, relative } = require('path');
|
2 | 2 | const { getOptions } = require('loader-utils');
|
3 |
| -const VirtualModules = require('./lib/virtual'); |
4 | 3 |
|
5 | 4 | const hotApi = require.resolve('./lib/hot-api.js');
|
6 | 5 |
|
@@ -96,20 +95,22 @@ function deprecatePreprocessOptions(options) {
|
96 | 95 | options.preprocess = options.preprocess || preprocessOptions;
|
97 | 96 | }
|
98 | 97 |
|
99 |
| -const virtualModuleInstances = new Map(); |
| 98 | +const virtualModules = new Map(); |
| 99 | +let index = 0; |
100 | 100 |
|
101 | 101 | module.exports = function(source, map) {
|
102 |
| - if (this._compiler && !virtualModuleInstances.has(this._compiler)) { |
103 |
| - virtualModuleInstances.set(this._compiler, new VirtualModules(this._compiler)); |
104 |
| - } |
105 |
| - |
106 |
| - const virtualModules = virtualModuleInstances.get(this._compiler); |
107 |
| - |
108 | 102 | this.cacheable();
|
109 |
| - |
| 103 | + |
110 | 104 | const options = Object.assign({}, getOptions(this));
|
111 | 105 | const callback = this.async();
|
112 | 106 |
|
| 107 | + if (options.cssPath) { |
| 108 | + const css = virtualModules.get(options.cssPath); |
| 109 | + virtualModules.delete(options.cssPath); |
| 110 | + callback(null, css); |
| 111 | + return; |
| 112 | + } |
| 113 | + |
113 | 114 | const isServer = this.target === 'node' || (options.generate && options.generate == 'ssr');
|
114 | 115 | const isProduction = this.minimize || process.env.NODE_ENV === 'production';
|
115 | 116 |
|
@@ -161,17 +162,11 @@ module.exports = function(source, map) {
|
161 | 162 | }
|
162 | 163 |
|
163 | 164 | if (options.emitCss && css.code) {
|
164 |
| - const cssFilepath = compileOptions.filename.replace( |
165 |
| - /\.[^/.]+$/, |
166 |
| - `.svelte.css` |
167 |
| - ); |
168 |
| - |
| 165 | + const resource = posixify(this.resource); |
| 166 | + const cssPath = `${resource}.${index++}.css`; |
169 | 167 | css.code += '\n/*# sourceMappingURL=' + css.map.toUrl() + '*/';
|
170 |
| - js.code = js.code + `\nimport '${posixify(cssFilepath)}';\n`; |
171 |
| - |
172 |
| - if (virtualModules) { |
173 |
| - virtualModules.writeModule(cssFilepath, css.code); |
174 |
| - } |
| 168 | + js.code += `\nimport '${cssPath}!=!svelte-loader?cssPath=${cssPath}!${resource}'\n;`; |
| 169 | + virtualModules.set(cssPath, css.code); |
175 | 170 | }
|
176 | 171 |
|
177 | 172 | callback(null, js.code, js.map);
|
|
0 commit comments