Skip to content

Commit 29d18d1

Browse files
committed
支持base64
1 parent 6e116e5 commit 29d18d1

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

src/getSelectorName.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ module.exports = function getSelectorName(decl, opt = {}) {
3636
}
3737
}
3838

39-
if (parentParams) {
39+
if (parentParams !== 'normal') {
4040
const atRulesConfigKey = ('@' + parentName + parentParams).replace(/ /g, '')
4141
const atRuleSuffix = (atRulesConfig[atRulesConfigKey] || {}).suffix
4242
parentParamsSuffixs[parentParams] = parentParamsSuffixs[parentParams] || atRuleSuffix || parentNum++

src/loader.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ const CSSFlatError = require('./error')
44
const vm = require('vm')
55
const path = require('path')
66
const loadConfig = require('./getLoaderConfig')
7-
7+
const urlItemRegExpG = /___CSS_FLAT_LOADER_URL___([0-9]+)___/g
8+
const urlItemRegExp = /___CSS_FLAT_LOADER_URL___([0-9]+)___/
9+
const urlItems = []
810
function getEvaluated(output, modules) {
911
const m = { exports: {} }
1012
try {
@@ -16,7 +18,9 @@ function getEvaluated(output, modules) {
1618
module = module.substr(19)
1719
if (modules && modules[module])
1820
return modules[module]
19-
return '{' + module + '}'
21+
const loaderUrl = '___CSS_FLAT_LOADER_URL___' + urlItems.length + '___'
22+
urlItems.push({ url: module })
23+
return loaderUrl
2024
})
2125
} catch (e) {
2226
throw e
@@ -35,12 +39,9 @@ module.exports = function (input) {
3539
params.plugins = params.plugins || this.options['css-flat']
3640

3741
let configPath
38-
39-
/* params.plugins = []
40-
params.sourceMap = true
41-
params.atRules = [{
42-
'@media screen and (min-width: 480px)': 'm1',
43-
}]*/
42+
/*
43+
params.plugins = []
44+
params.sourceMap = true */
4445

4546
if (params.config) {
4647
if (path.isAbsolute(params.config)) {
@@ -74,6 +75,14 @@ module.exports = function (input) {
7475
if (err) return callback(err)
7576

7677
let cssAsString = JSON.stringify(result.source)
78+
cssAsString = cssAsString.replace(urlItemRegExpG, (item) => {
79+
const match = urlItemRegExp.exec(item)
80+
const idx = +match[1]
81+
const urlItem = urlItems[idx]
82+
const urlRequest = urlItem.url
83+
return '\" + require(' + loaderUtils.stringifyRequest(this, urlRequest) + ') + \"'
84+
})
85+
console.log(cssAsString)
7786
let exportJs = JSON.stringify(result.exports)
7887
if (exportJs) {
7988
exportJs = 'exports.locals = ' + exportJs + ';'

src/processCss.js

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const cacheLocalRuleInfo = {}
99
const parserPlugin = postcss.plugin('postcss-flat', (options) => {
1010
const {
1111
locals = {},
12-
prefix = '',
12+
prefix = 'a',
1313
atRulesConfig,
1414
htmlClass = 'css-flat',
1515
pseudoMap,
@@ -20,12 +20,12 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
2020
} = options
2121
const genMap = sourceMap && inputMap
2222
const localsMap = _.invert(locals)
23-
const localRuleMark = { normal: {} }
23+
const localRuleMark = {}
2424
return (css) => {
2525
const exports = {}
2626
// const globalRule = []
2727
css.walkRules((rule) => {
28-
let parentParams = ''
28+
let parentParams = 'normal'
2929
let parentName = ''
3030
if (rule.parent.type === 'atrule') {
3131
parentName = rule.parent.name
@@ -47,7 +47,7 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
4747
} else if (isClassSelector) {
4848
const className = sel.replace(/\.| /g, '').replace(selectorHalf, '')
4949
rule.walkDecls(function (decl) {
50-
const prop = decl.prop
50+
const prop = decl.prop.replace('--sourceMap-', '')
5151
const value = decl.value
5252
const newClassName = getSelectorName(decl, {
5353
parentName,
@@ -74,14 +74,11 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
7474
newClassName,
7575
selectorHalf, // 伪类后缀
7676
priority: priority + ' ',
77+
parentParams,
7778
}
7879
}
79-
if (parentParams) {
80-
localRuleMark[parentParams] = localRuleMark[parentParams] || {}
81-
localRuleMark[parentParams][newClassName] = cacheLocalRuleInfo[newClassName]
82-
} else {
83-
localRuleMark.normal[newClassName] = cacheLocalRuleInfo[newClassName]
84-
}
80+
localRuleMark[parentParams] = localRuleMark[parentParams] || {}
81+
localRuleMark[parentParams][newClassName] = cacheLocalRuleInfo[newClassName]
8582

8683
const localsKey = localsMap[className]
8784
exports[localsKey] = (exports[localsKey] || (genMap ? className : '')) + ' ' + newClassName
@@ -109,7 +106,8 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
109106

110107
for (let newClassName in localRuleMark.normal) {
111108
const { selectorHalf = '', priority, prop, value } = cacheLocalRuleInfo[newClassName]
112-
css.append(priority + '.' + newClassName + selectorHalf + '{' + prop + ':' + value + '}')
109+
const newSelector = priority + '.' + newClassName + selectorHalf
110+
css.append(newSelector + '{' + prop + ':' + value + '}')
113111
}
114112
options.exports = exports
115113
}

0 commit comments

Comments
 (0)