From eb824626c2681a1e9b1278a3ff5020227847434a Mon Sep 17 00:00:00 2001 From: qiang Date: Fri, 5 Aug 2022 17:20:54 +0800 Subject: [PATCH] fix: postcss-uniapp-plugin support postcss8 --- packages/vue-cli-plugin-uni/package.json | 4 +- .../packages/postcss/index.js | 19 ++++- .../packages/postcss/index.v3.js | 75 +++++++++++-------- 3 files changed, 65 insertions(+), 33 deletions(-) diff --git a/packages/vue-cli-plugin-uni/package.json b/packages/vue-cli-plugin-uni/package.json index 0f23a1e92..7566b66e1 100644 --- a/packages/vue-cli-plugin-uni/package.json +++ b/packages/vue-cli-plugin-uni/package.json @@ -29,7 +29,6 @@ "mkdirp": "^0.5.1", "module-alias": "^2.1.0", "neo-async": "^2.6.1", - "postcss": "^7.0.7", "postcss-import": "^12.0.1", "postcss-selector-parser": "^5.0.0", "postcss-value-parser": "^3.3.1", @@ -39,5 +38,8 @@ "wrap-loader": "^0.2.0", "xregexp": "4.0.0" }, + "peerDependencies": { + "postcss": ">=7" + }, "gitHead": "9e2d0f8e244724fcd64880316c57d837d1778cf8" } diff --git a/packages/vue-cli-plugin-uni/packages/postcss/index.js b/packages/vue-cli-plugin-uni/packages/postcss/index.js index 97521f922..a0da64cb6 100644 --- a/packages/vue-cli-plugin-uni/packages/postcss/index.js +++ b/packages/vue-cli-plugin-uni/packages/postcss/index.js @@ -156,7 +156,7 @@ if (process.env.UNI_USING_V3) { * 转换 upx * 转换 px */ - module.exports = postcss.plugin('postcss-uniapp-plugin', function (opts) { + const fn = function (opts) { opts = { ...defaultOpts, ...opts @@ -265,5 +265,20 @@ if (process.env.UNI_USING_V3) { }) } } - }) + } + + const version = Number(require('postcss/package.json').version.split('.')[0]) + + if (version < 8) { + module.exports = postcss.plugin('postcss-uniapp-plugin', fn) + } else { + module.exports = function (opts) { + return { + postcssPlugin: 'postcss-uniapp-plugin', + Once: fn(opts) + } + } + + module.exports.postcss = true + } } diff --git a/packages/vue-cli-plugin-uni/packages/postcss/index.v3.js b/packages/vue-cli-plugin-uni/packages/postcss/index.v3.js index 0e71bc9e9..602d6bda9 100644 --- a/packages/vue-cli-plugin-uni/packages/postcss/index.v3.js +++ b/packages/vue-cli-plugin-uni/packages/postcss/index.v3.js @@ -1,4 +1,3 @@ -const postcss = require('postcss') const selectorParser = require('postcss-selector-parser') const TAGS = Object.keys(require('@dcloudio/uni-cli-shared').tags) @@ -14,34 +13,50 @@ const isInsideKeyframes = function (rule) { let rewriteUrl -module.exports = postcss.plugin('postcss-uniapp-plugin', function (opts) { - return function (root, result) { - if (!rewriteUrl) { - rewriteUrl = require('@dcloudio/uni-cli-shared/lib/url-loader').rewriteUrl - } - rewriteUrl(root) - - root.walkRules(rule => { - // Transform each rule here - if (!isInsideKeyframes(rule)) { - // rule.selectors == comma seperated selectors - // a, b.c {} => ["a", "b.c"] - rule.selectors = rule.selectors.map(complexSelector => - // complexSelector => simpleSelectors - // "a.b#c" => ["a", ".b", "#c"] - transformSelector(complexSelector, simpleSelectors => { - // only process type selector, leave alone class & id selectors - return simpleSelectors.walkTags(tag => { - if (tag.value === 'page') { - tag.value = 'body' - } else if (~TAGS.indexOf(tag.value) && tag.value.substring( - 0, 4) !== 'uni-') { - tag.value = 'uni-' + tag.value - } - }) +function once (root) { + if (!rewriteUrl) { + rewriteUrl = require('@dcloudio/uni-cli-shared/lib/url-loader').rewriteUrl + } + rewriteUrl(root) + + root.walkRules(rule => { + // Transform each rule here + if (!isInsideKeyframes(rule)) { + // rule.selectors == comma seperated selectors + // a, b.c {} => ["a", "b.c"] + rule.selectors = rule.selectors.map(complexSelector => + // complexSelector => simpleSelectors + // "a.b#c" => ["a", ".b", "#c"] + transformSelector(complexSelector, simpleSelectors => { + // only process type selector, leave alone class & id selectors + return simpleSelectors.walkTags(tag => { + if (tag.value === 'page') { + tag.value = 'body' + } else if (~TAGS.indexOf(tag.value) && tag.value.substring( + 0, 4) !== 'uni-') { + tag.value = 'uni-' + tag.value + } }) - ) - } - }) + }) + ) + } + }) +} + +const version = Number(require('postcss/package.json').version.split('.')[0]) + +if (version < 8) { + const postcss = require('postcss') + module.exports = postcss.plugin('postcss-uniapp-plugin', function (opts) { + return once + }) +} else { + module.exports = function (opts) { + return { + postcssPlugin: 'postcss-uniapp-plugin', + Once: once + } } -}) + + module.exports.postcss = true +} -- GitLab