From cf40fb71159b809b27a314351bf8ed8ae0ce4c20 Mon Sep 17 00:00:00 2001 From: qiang Date: Thu, 28 May 2020 16:28:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3App=E7=AB=AF=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=BB=84=E4=BB=B6=E6=97=B6?= =?UTF-8?q?=E5=B1=80=E9=83=A8=E7=BB=84=E4=BB=B6=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__tests__/components.spec.js | 33 ++++++++++++++++++- .../lib/babel/scoped-component-traverse.js | 9 ++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/packages/webpack-uni-mp-loader/__tests__/components.spec.js b/packages/webpack-uni-mp-loader/__tests__/components.spec.js index 2bb8e4319..e4e1a7132 100644 --- a/packages/webpack-uni-mp-loader/__tests__/components.spec.js +++ b/packages/webpack-uni-mp-loader/__tests__/components.spec.js @@ -122,6 +122,37 @@ global['__wxVueOptions'] = { source: '../icon/loading.vue' } ]) + + assertCodegen( + `import myButton from '@/components/my-button/my-button.vue'; + export default { + components: { + myButton + } + } + import VanButton from '../button/index.vue' + import VanSearch from '../search/index.vue' + exports.default.components = Object.assign({ + 'van-button': VanButton, + 'van-search': VanSearch, + },exports.default.components || {})`, + [ + { + name: 'van-button', + value: 'VanButton', + source: '../button/index.vue' + }, + { + name: 'van-search', + value: 'VanSearch', + source: '../search/index.vue' + }, + { + name: 'myButton', + value: 'myButton', + source: '@/components/my-button/my-button.vue' + } + ]) }) it('parse global component', () => { @@ -147,4 +178,4 @@ global['__wxVueOptions'] = { source: '@/components/tab-nvue/mediaList.vue' }], false) }) -}) +}) diff --git a/packages/webpack-uni-mp-loader/lib/babel/scoped-component-traverse.js b/packages/webpack-uni-mp-loader/lib/babel/scoped-component-traverse.js index c3d3cb21e..42e320568 100644 --- a/packages/webpack-uni-mp-loader/lib/babel/scoped-component-traverse.js +++ b/packages/webpack-uni-mp-loader/lib/babel/scoped-component-traverse.js @@ -34,15 +34,16 @@ function handleObjectExpression (declaration, path, state) { } } -function handleComponentsObjectExpression (componentsObjExpr, path, state) { +function handleComponentsObjectExpression (componentsObjExpr, path, state, prepend) { const properties = componentsObjExpr.properties .filter(prop => t.isObjectProperty(prop) && t.isIdentifier(prop.value)) - state.components = parseComponents(properties.map(prop => { + const components = parseComponents(properties.map(prop => { return { name: prop.key.name || prop.key.value, value: prop.value.name } }), path.scope.bindings, path) + state.components = prepend ? components.concat(state.components) : components } module.exports = function (ast, state = { @@ -74,7 +75,7 @@ module.exports = function (ast, state = { rightExpression.arguments.length === 2 && t.isObjectExpression(rightExpression.arguments[0]) ) { - handleComponentsObjectExpression(rightExpression.arguments[0], path, state) + handleComponentsObjectExpression(rightExpression.arguments[0], path, state, true) } }, ExportDefaultDeclaration (path) { @@ -105,4 +106,4 @@ module.exports = function (ast, state = { ast, state } -} +} -- GitLab