Skip to content

Commit 898eeae

Browse files
refactor: module
1 parent e76690b commit 898eeae

File tree

2 files changed

+68
-72
lines changed

2 files changed

+68
-72
lines changed

src/index.js

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
getImportPrefix,
2323
getFilter,
2424
getImportCode,
25-
getModuleCode,
2625
getExportType,
2726
prepareCode,
2827
} from './utils';
@@ -129,8 +128,6 @@ export default function loader(content, map, meta) {
129128
importPrefix,
130129
};
131130

132-
const importCode = getImportCode(buildInfo);
133-
const moduleCode = getModuleCode(buildInfo);
134131
const exportItems = result.messages
135132
.filter((message) => (message.type === 'export' ? message : false))
136133
.reduce((accumulator, currentValue) => {
@@ -139,27 +136,28 @@ export default function loader(content, map, meta) {
139136
return accumulator;
140137
}, []);
141138

142-
const code = [
143-
// API
139+
const importCode = getImportCode(buildInfo);
140+
const moduleCode = !onlyLocals
141+
? `exports.push([module.id, ${JSON.stringify(result.css)}, ""${
142+
sourceMap && result.map ? `,${result.map}` : ''
143+
}]);\n`
144+
: '';
145+
const exportCode =
146+
exportItems.length > 0
147+
? `${getExportType(onlyLocals)} = {\n${exportItems.join(',\n')}\n};`
148+
: false;
149+
const apiCode =
144150
importCode.length > 0 || moduleCode.length > 0
145151
? `exports = module.exports = require(${stringifyRequest(
146152
this,
147153
require.resolve('./runtime/api')
148154
)})(${sourceMap});\n`
149-
: false,
150-
// Imports
151-
importCode,
152-
// Code
153-
moduleCode,
154-
// Exports
155-
exportItems.length > 0
156-
? `${getExportType(onlyLocals)} = {\n${exportItems.join(',\n')}\n};`
157-
: false,
158-
]
159-
.filter(Boolean)
160-
.join('');
155+
: false;
161156

162-
return callback(null, prepareCode(buildInfo, code));
157+
return callback(
158+
null,
159+
prepareCode({ apiCode, importCode, moduleCode, exportCode }, buildInfo)
160+
);
163161
})
164162
.catch((error) => {
165163
callback(

src/utils.js

Lines changed: 52 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -238,74 +238,73 @@ function getImportCode(buildInfo) {
238238
return importItems.length > 0 ? `${importItems.join('\n')}\n` : '';
239239
}
240240

241-
function getModuleCode(buildInfo) {
242-
const { onlyLocals } = buildInfo;
243-
244-
if (onlyLocals) {
245-
return '';
246-
}
241+
function getExportType(onlyLocals) {
242+
return onlyLocals ? 'module.exports' : 'exports.locals';
243+
}
247244

248-
const moduleItems = [];
245+
function getIcssReplacer(item, buildInfo) {
246+
const { importPrefix, onlyLocals, loaderContext } = buildInfo;
247+
const importUrl = importPrefix + urlToRequest(item.url);
249248

250-
const { result, sourceMap } = buildInfo;
249+
return () =>
250+
onlyLocals
251+
? `" + require(${stringifyRequest(
252+
loaderContext,
253+
importUrl
254+
)})[${JSON.stringify(item.export)}] + "`
255+
: `" + require(${stringifyRequest(
256+
loaderContext,
257+
importUrl
258+
)}).locals[${JSON.stringify(item.export)}] + "`;
259+
}
251260

252-
let cssAsString = JSON.stringify(result.css);
261+
function prepareCode(file, buildInfo) {
262+
const { apiCode, importCode } = file;
263+
let { moduleCode, exportCode } = file;
264+
const { result } = buildInfo;
253265

254266
result.messages
255267
.filter(
256-
(message) =>
257-
message.pluginName === 'postcss-url-parser' && message.type === 'url'
268+
(message) => message.type === 'icss-import' || message.type === 'url'
258269
)
259270
.forEach((message) => {
260-
const { placeholder } = message.item;
261-
262-
cssAsString = cssAsString.replace(
263-
new RegExp(placeholder, 'g'),
264-
() => `" + ${placeholder} + "`
265-
);
266-
});
267-
268-
moduleItems.push(
269-
`exports.push([module.id, ${cssAsString}, ""${
270-
sourceMap && result.map ? `,${result.map}` : ''
271-
}]);`
272-
);
271+
// Replace all urls on `require`
272+
if (message.type === 'url') {
273+
const { placeholder } = message.item;
273274

274-
return moduleItems.length > 0 ? `${moduleItems.join('\n')}\n` : '';
275-
}
275+
if (moduleCode) {
276+
// eslint-disable-next-line no-param-reassign
277+
moduleCode = moduleCode.replace(
278+
new RegExp(placeholder, 'g'),
279+
() => `" + ${placeholder} + "`
280+
);
281+
}
282+
}
276283

277-
function getExportType(onlyLocals) {
278-
return onlyLocals ? 'module.exports' : 'exports.locals';
279-
}
284+
// Replace external ICSS import on `require`
285+
if (message.type === 'icss-import') {
286+
const { item } = message;
287+
const replacer = getIcssReplacer(item, buildInfo);
280288

281-
function prepareCode(buildInfo, code) {
282-
const { result, importPrefix, onlyLocals, loaderContext } = buildInfo;
289+
if (moduleCode) {
290+
// eslint-disable-next-line no-param-reassign
291+
moduleCode = moduleCode.replace(
292+
new RegExp(`___CSS_LOADER_IMPORT___(${item.index})___`, 'g'),
293+
replacer
294+
);
295+
}
283296

284-
// replace external ICSS import on `require`
285-
result.messages
286-
.filter((message) => message.type === 'icss-import')
287-
.forEach((message) => {
288-
const { item } = message;
289-
const importUrl = importPrefix + urlToRequest(item.url);
290-
291-
// eslint-disable-next-line no-param-reassign
292-
code = code.replace(
293-
new RegExp(`___CSS_LOADER_IMPORT___(${item.index})___`, 'g'),
294-
() => {
295-
return onlyLocals
296-
? `" + require(${stringifyRequest(
297-
loaderContext,
298-
importUrl
299-
)})[${JSON.stringify(item.export)}] + "`
300-
: `" + require(${stringifyRequest(
301-
loaderContext,
302-
importUrl
303-
)}).locals[${JSON.stringify(item.export)}] + "`;
297+
if (exportCode) {
298+
// eslint-disable-next-line no-param-reassign
299+
exportCode = exportCode.replace(
300+
new RegExp(`___CSS_LOADER_IMPORT___(${item.index})___`, 'g'),
301+
replacer
302+
);
304303
}
305-
);
304+
}
306305
});
307306

308-
return code;
307+
return [apiCode, importCode, moduleCode, exportCode].filter(Boolean).join('');
309308
}
310309

311310
export {
@@ -315,7 +314,6 @@ export {
315314
getModulesPlugins,
316315
normalizeSourceMap,
317316
getImportCode,
318-
getModuleCode,
319317
getExportType,
320318
prepareCode,
321319
};

0 commit comments

Comments
 (0)