diff --git a/packages/webpack-uni-mp-loader/__tests__/components.spec.js b/packages/webpack-uni-mp-loader/__tests__/components.spec.js index 2bb8e4319a794d6dbcfd64be08537b2a7de9f673..e4e1a7132c358b74951b4f58f2fadf39098f2876 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 c3d3cb21ef02759b469825d1beba162c4ea5e188..42e320568a4f5e96d6ee3fcd0784b9f868c7535d 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 } -} +}