diff --git a/packages/vue-cli-plugin-uni/package.json b/packages/vue-cli-plugin-uni/package.json index 0f23a1e92c5ec3f9209ef13ff1419eb8dafe4e8a..7566b66e1837038a81e8fd21c1e8c51b994333f5 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 97521f9225e57db18e562e7e471539ae654fe029..a0da64cb66992a3f4c7d8cccc4d76a288ab2f0e1 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 0e71bc9e97221bcc387a6029bc204467d7ead290..602d6bda9a656a78173242246f89781558233f5b 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 +}