diff --git a/packages/uni-cli-shared/lib/pages.js b/packages/uni-cli-shared/lib/pages.js index 9e2ee2b3cf7a13603d73fa7e72cecaf5b9527e6f..d17f4391e05b4613f8de318aecbfa38385d47ea6 100644 --- a/packages/uni-cli-shared/lib/pages.js +++ b/packages/uni-cli-shared/lib/pages.js @@ -328,6 +328,15 @@ function addPageUsingComponents (pagePath, usingComponents) { // 存储自动组件 const autoComponentMap = {} +/** + * UNI_AUTO_COMPONENTS 被更新,重新刷新 map + */ +function refreshAutoComponentMap () { + Object.keys(autoComponentMap).forEach(name => { + addAutoComponent(name) + }) +} + function addAutoComponent (name) { const options = process.UNI_AUTO_COMPONENTS const opt = options.find(opt => opt.pattern.test(name)) @@ -355,6 +364,18 @@ function getAutoComponents (autoComponents) { return components } +function parseUsingAutoImportComponents (usingAutoImportComponents) { + const autoImportComponents = [] + if (usingAutoImportComponents) { + Object.keys(usingAutoImportComponents).forEach(pattern => { + autoImportComponents.push({ + pattern: new RegExp(pattern), + replacement: usingAutoImportComponents[pattern] + }) + }) + } + return autoImportComponents +} module.exports = { getMainEntry, getNVueMainEntry, @@ -363,10 +384,12 @@ module.exports = { getPagesJson, parsePagesJson, pagesJsonJsFileName, - getAutoComponents, + getAutoComponents, + refreshAutoComponentMap, addPageUsingComponents, getUsingComponentsCode, generateUsingComponentsCode, getGlobalUsingComponentsCode, + parseUsingAutoImportComponents, generateGlobalUsingComponentsCode } diff --git a/packages/vue-cli-plugin-uni/lib/env.js b/packages/vue-cli-plugin-uni/lib/env.js index 99617975fd785f0fd7b2c5b928c5f463640f2e56..ec222383d8998c36e0ed2da7d561445ad29ec24f 100644 --- a/packages/vue-cli-plugin-uni/lib/env.js +++ b/packages/vue-cli-plugin-uni/lib/env.js @@ -290,18 +290,6 @@ if (runByHBuilderX) { } } } - -// 组件自动导入配置 -process.UNI_AUTO_COMPONENTS = [] -const usingAutoImportComponents = pagesJsonObj.usingAutoImportComponents -if (usingAutoImportComponents) { - Object.keys(usingAutoImportComponents).forEach(pattern => { - process.UNI_AUTO_COMPONENTS.push({ - pattern: new RegExp(pattern), - replacement: usingAutoImportComponents[pattern] - }) - }) -} if ( process.env.UNI_USING_CACHE && diff --git a/packages/webpack-uni-pages-loader/lib/index-new.js b/packages/webpack-uni-pages-loader/lib/index-new.js index cedc92a0fed40acfb9be180f9e70ec868f3259b9..456b9dc6e9a8265533549dc550d163ae3ac3e6d9 100644 --- a/packages/webpack-uni-pages-loader/lib/index-new.js +++ b/packages/webpack-uni-pages-loader/lib/index-new.js @@ -17,7 +17,9 @@ const { } = require('@dcloudio/uni-cli-shared/lib/cache') const { - pagesJsonJsFileName + pagesJsonJsFileName, + refreshAutoComponentMap, + parseUsingAutoImportComponents } = require('@dcloudio/uni-cli-shared/lib/pages') const parseStyle = require('./util').parseStyle @@ -31,6 +33,17 @@ function renameUsingComponents (jsonObj) { return jsonObj } +let lastUsingAutoImportComponentsJson = '' + +function initAutoImportComponents (usingAutoImportComponents = {}) { + const newUsingAutoImportComponentsJson = JSON.stringify(usingAutoImportComponents) + if (newUsingAutoImportComponentsJson !== lastUsingAutoImportComponentsJson) { + lastUsingAutoImportComponentsJson = newUsingAutoImportComponentsJson + process.UNI_AUTO_COMPONENTS = parseUsingAutoImportComponents(usingAutoImportComponents) + refreshAutoComponentMap() + } +} + module.exports = function (content) { this.cacheable && this.cacheable() @@ -53,6 +66,10 @@ module.exports = function (content) { this.addDependency(file) } }) + + // 组件自动导入配置 + initAutoImportComponents(pagesJson.usingAutoImportComponents) + // TODO 与 usingComponents 放在一块读取设置 if (manifestJson.transformPx === false) { process.UNI_TRANSFORM_PX = false @@ -83,8 +100,8 @@ module.exports = function (content) { if (jsonFile) { if (jsonFile.name === 'define-pages.js') { appConfigContent = jsonFile.content - } else { - // app-view 不需要生成 app-config-service.js,manifest.json + } else { + // app-view 不需要生成 app-config-service.js,manifest.json !isAppView && this.emitFile(jsonFile.name, jsonFile.content) } }