From cb5c2d09a5758fbefcb1d6594380d7b8af41090d Mon Sep 17 00:00:00 2001 From: songyu Date: Wed, 23 Feb 2022 15:28:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8C=89=E9=9C=80=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../collect-dependency.js | 11 +++++++++-- .../copy-outer-components-for-independent.js | 5 +++-- .../collect-wx-component-used-status.js | 2 +- .../optimize-components-position/index.js | 7 ------- .../webpack-uni-mp-loader/lib/plugin/generate-json.js | 6 ++++-- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/uni-mp-weixin/lib/analyze-wxcomponent-dependency/collect-dependency.js b/packages/uni-mp-weixin/lib/analyze-wxcomponent-dependency/collect-dependency.js index 507465801..dfe7b4905 100644 --- a/packages/uni-mp-weixin/lib/analyze-wxcomponent-dependency/collect-dependency.js +++ b/packages/uni-mp-weixin/lib/analyze-wxcomponent-dependency/collect-dependency.js @@ -70,8 +70,15 @@ class CollectDependency { getJsonDeps (file) { const deps = []; const dirName = path.dirname(file); - const fileContent = this.readFileSync(file); - const { usingComponents } = JSON.parse(fileContent); + let fileContent = this.readFileSync(file); + if (fileContent && fileContent instanceof Buffer) { + fileContent = fileContent.toString('utf-8'); + } + if (!fileContent || !(fileContent.trim())) { + return []; + } + fileContent = JSON.parse(fileContent); + const usingComponents = fileContent.usingComponents; if (usingComponents && typeof usingComponents === 'object') { Object.values(usingComponents).forEach((component) => { component = resolveToContext(dirName, component, this.context); diff --git a/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-outer-components-for-independent.js b/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-outer-components-for-independent.js index 9252ef47a..bd3bedde5 100644 --- a/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-outer-components-for-independent.js +++ b/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-outer-components-for-independent.js @@ -64,8 +64,8 @@ class Index extends Analyze { let cacheSet = new Set(); let cacheGlobalUsageMap = new Map(); // 收集包外组件 - const colletOuterCompos = independentPage => collectAllOutSideComponentsMap(independentRoot, emitFileMap, independentPage, cacheSet, cacheGlobalUsageMap); - independentPages.forEach(colletOuterCompos); + const collectOuterCompos = independentPage => collectAllOutSideComponentsMap(independentRoot, emitFileMap, independentPage, cacheSet, cacheGlobalUsageMap); + independentPages.forEach(collectOuterCompos); // 如果是原生组件,则忽略wxComponents以外的组件 cacheSet = [...cacheSet].filter(componentPath => { @@ -162,6 +162,7 @@ class Index extends Analyze { // emitFileMap 后面会统一挂到assets上 if (!fromAssetsFlag) return; + delete pageObj.usingGlobalComponents compilationAssets[`${componentWhoUsedGlobalCompo}.json`] = generateAsset(JSON.stringify(pageObj)); }); } diff --git a/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-wx-components-on-demand/collect-wx-component-used-status.js b/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-wx-components-on-demand/collect-wx-component-used-status.js index 2abcfa421..22f6da26f 100644 --- a/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-wx-components-on-demand/collect-wx-component-used-status.js +++ b/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/copy-wx-components-on-demand/collect-wx-component-used-status.js @@ -14,7 +14,7 @@ function collectWxComponentUsedStatus (emitFileMap) { } const explicitComponents = jsonFileInfo.usingComponents || {}; // 非全局组件 - const usingGlobalWxComponents = jsonFileInfo.globalComponentsForOnDemand || {}; + const usingGlobalWxComponents = jsonFileInfo.usingGlobalComponents || {}; // FIX 全局组件和直接引用的组件名称相同的情况 const currentAllComponents = Object.assign({}, usingGlobalWxComponents, explicitComponents); diff --git a/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/index.js b/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/index.js index 5e13a466c..5549ed0b0 100644 --- a/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/index.js +++ b/packages/uni-mp-weixin/lib/independent-plugins/optimize-components-position/index.js @@ -1,8 +1,5 @@ const CopyOuterComponentsForIndependent = require('./copy-outer-components-for-independent'); const CopyWxComponentOnDemand = require('./copy-wx-components-on-demand'); -const { getJsonFileMap } = require('@dcloudio/uni-cli-shared/lib/cache'); -const { generateAsset } = require('./util'); -const { SyncBailHook } = require('tapable'); // @dcloudio/webpack-uni-mp-loader/lib/plugin/index-new.js // 需要在在上述插件之后执行(获取处理过的json @@ -14,8 +11,6 @@ class DependencyAnalyze { } init (emitFileMap, compilation) { - const thisCompilationAssets = compilation.assets; - const manifestConfig = process.UNI_MANIFEST; const weixinConfig = manifestConfig['mp-weixin'] || {}; const independentSwitch = !!weixinConfig.independentSwitch; @@ -28,8 +23,6 @@ class DependencyAnalyze { if (independentSwitch) { new CopyOuterComponentsForIndependent(emitFileMap, this.AnalyzeWxcomponentDependency, compilation).init(); } - - // TODO 开关控制 按需复制wxcomponents } } diff --git a/packages/webpack-uni-mp-loader/lib/plugin/generate-json.js b/packages/webpack-uni-mp-loader/lib/plugin/generate-json.js index 7a372f303..7d94875a7 100644 --- a/packages/webpack-uni-mp-loader/lib/plugin/generate-json.js +++ b/packages/webpack-uni-mp-loader/lib/plugin/generate-json.js @@ -112,10 +112,11 @@ function normalizeUsingComponents (file, usingComponents) { return usingComponents } -const emitFileMap = new Map(); +const cacheFileMap = new Map(); module.exports = function generateJson (compilation) { analyzeUsingComponents() + const emitFileMap = new Map([...cacheFileMap]); const jsonFileMap = getChangedJsonFileMap() for (const name of jsonFileMap.keys()) { const jsonObj = JSON.parse(jsonFileMap.get(name)) @@ -214,6 +215,7 @@ module.exports = function generateJson (compilation) { } emitFileMap.set(name, jsonObj); + cacheFileMap.set(name, JSON.parse(JSON.stringify(jsonObj))); // 做一次拷贝,emitFileMap中内容在后面会被修改 } @@ -221,8 +223,8 @@ module.exports = function generateJson (compilation) { (new AnalyzeDependency()).init(emitFileMap, compilation); for (const [name, jsonObj] of emitFileMap) { - emit(name, jsonObj, compilation); delete jsonObj.usingGlobalComponents; + emit(name, jsonObj, compilation); } if (process.env.UNI_USING_CACHE && jsonFileMap.size) { -- GitLab