我正在使用 Vue.js 开发一个项目,并希望应用原子设计方法,但我想以集群和更智能的方式导入组件
目前
import GridLayout from '@/components/bosons/GridLayout.vue'
import LocalStorage from '@/components/bosons/LocalStorage.vue'
import ButtonStyled from '@/components/atoms/ButtonStyled.vue'
import TextLead from '@/components/atoms/TextLead.vue'
import InputSearch from '@/components/atoms/InputSearch.vue'
import SearchForm from '@/components/molecules/SearchForm.vue'
我多么希望
import {
GridLayout,
LocalStorage
} from '@/components/bosons'
import {
ButtonStyled,
TextLead,
InputSearch
} from '@/components/atoms'
import {
SearchForm
} from '@/components/molecules'
解决方案?我想在文件夹中放置一个 index.js
/bosons/index.js
/atoms/index.js
/molecules/index.js
index.js 将导入所有组件并导出,所以它会像
import ButtonStyled from './ButtonStyled.vue'
export default {
ButtonStyled
}
或者
export { default as ButtonStyled } from './ButtonStyled.vue'
工作正常,但是这种方式还是静态的,每次新建组件,都需要添加index.js,每次删除组件,也需要从index.js中删除
我需要动态导入文件夹的所有组件
我离得越近,
const req = require.context('./', true, /\.vue$/)
const modules = {}
req.keys().forEach(fileName => {
const componentName = fileName.replace(/^.+\/([^/]+)\.vue/, '$1')
modules[componentName] = req(fileName).default
})
export const { ButtonStyled, TextLead } = modules
但我仍在静态定义导出变量名称,我需要根据文件夹内的组件定义动态
注意:我不能使用
export default modules
如果我使用上面的代码片段,我将无法以我需要的方式导入它,即:
import { ButtonStyled } from "@/components/atoms"