Я пытаюсь добиться динамической регистрации Vue.js async component
. Это видео дало мне код, который прекрасно работает, но загружает все модули, даже если они не используются.
import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
// Require in a base component context
const requireComponent = require.context(
'../components/base', false, /base-[\w-]+\.vue$/,
)
requireComponent.keys().forEach(fileName => {
// Get component config
const componentConfig = requireComponent(fileName)
// Get PascalCase name of component
const componentName = upperFirst(
camelCase(fileName.replace(/^\.\//,
'').replace(/\.\w+$/,
'')),
)
// Register component globally
Vue.component(componentName, componentConfig.default || componentConfig)
})
Вместо этого я попытался создать асинхронные компоненты.Примерно так:
import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
// Require in a base component context
const requireComponent = require.context(
'../components/base', false, /base-[\w-]+\.vue$/,
)
requireComponent.keys().forEach(fileName => {
const componentPath = fileName.replace('./', '../components/base/');
// Get PascalCase name of component
const componentName = upperFirst(
camelCase(fileName.replace(/^\.\//,
'').replace(/\.\w+$/,
'')),
)
// Register component globally
Vue.component(componentName, () => import(componentPath))
})
Если в случае кода выше vue выдает ошибку
vue.esm.js:591 [Vue warn]: Failed to resolve async component: function () {
return __webpack_require__("./lib lazy recursive")(componentPath);
}
Reason: Error: Cannot find module '../components/base/base-button.vue'
Если я вручную записываю Vue.component('BaseButton', () => import('../components/base/base-button.vue'))
, это работает без проблем, но когда я пытаюсь это сделатьдинамически это не удается.Можно ли сделать такую async component
регистрацию, если да, то как?
Это тоже не сработает:
const button = '../components/base/base-button.vue'
Vue.component('BaseButton', () => import(button))
только если я буквально перенесу строку в функцию импорта.