Skip to content

Commit f7e0634

Browse files
committed
Generate components CSS on virtual files
1 parent ca1b71b commit f7e0634

File tree

3 files changed

+1084
-14
lines changed

3 files changed

+1084
-14
lines changed

index.js

+16-13
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
const { basename, extname, posix, relative } = require('path');
1+
const { basename, extname, relative } = require('path');
22
const { compile, preprocess } = require('svelte');
33
const { getOptions } = require('loader-utils');
4-
const { statSync, utimesSync, writeFileSync } = require('fs');
5-
const { tmpdir } = require('os');
4+
const VirtualModulesPlugin = require('webpack-virtual-modules');
65

76
const hotApi = require.resolve('./lib/hot-api.js');
7+
const virtualModules = new VirtualModulesPlugin();
88

99
function makeHot(id, code, hotOptions) {
1010
const options = JSON.stringify(hotOptions);
@@ -107,18 +107,18 @@ module.exports = function(source, map) {
107107
options.preprocess.filename = options.filename;
108108

109109
preprocess(source, options.preprocess).then(processed => {
110-
let { js, css, ast } = normalize(compile(processed.toString(), options));
110+
let { js, css } = normalize(compile(processed.toString(), options));
111111

112112
if (options.emitCss && css.code) {
113-
const posixTmpdir = posixify(tmpdir());
114-
const tmpFile = posix.join(posixTmpdir, 'svelte-' + ast.hash + '.css');
115-
116-
css.code += '\n/*# sourceMappingURL=' + css.map.toUrl() + '*/';
117-
js.code = js.code + `\nrequire('${tmpFile}');\n`;
118-
119-
writeFileSync(tmpFile, css.code);
120-
const { atime, mtime } = statSync(tmpFile);
121-
utimesSync(tmpFile, new Date(atime.getTime() - 99999), new Date(mtime.getTime() - 99999));
113+
const cssFilepath = options.filename.replace(
114+
/\.[^/.]+$/,
115+
`.${Math.random()
116+
.toString()
117+
.slice(2, 11)}.css`
118+
);
119+
css.code += '\n/*# sourceMappingURL=' + css.map.toUrl() + '*/'
120+
js.code = js.code + `\nrequire('${cssFilepath}');\n`
121+
virtualModules.writeModule(cssFilepath, css.code)
122122
}
123123

124124
if (options.hotReload && !isProduction && !isServer) {
@@ -134,3 +134,6 @@ module.exports = function(source, map) {
134134
callback(new Error(`${err.name}: ${err.toString()}`));
135135
});
136136
};
137+
138+
module.exports.plugin = virtualModules;
139+
module.exports.loader = __filename;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"dependencies": {
1818
"loader-utils": "^1.1.0",
1919
"svelte-dev-helper": "^1.1.4",
20-
"tmp": "0.0.31"
20+
"webpack-virtual-modules": "^0.1.9"
2121
},
2222
"devDependencies": {
2323
"chai": "^3.5.0",

0 commit comments

Comments
 (0)