Vue-Loader——导入一个导入组件的文件
Vue-Loader - Importing a File that Imports Components
我正在使用语义 UI CSS 框架制作 Vue 组件。我想做的是创建一个导入所有组件的 semantic.js(或者可能是 semantic.vue)文件,然后在我的 main.js 文件中导入该 semantic.js 文件.
换句话说,类似于以下内容:
src/components/semantic.js
import Label from ./elements/Label.vue
import Icon from ./elements/Icon.vue
import Divider from ./elements/Divider.vue
// Am I supposed to export these? If so, how?
src/main.js
import Semantic from ./components/semantic.js
new Vue({
el: '#app',
components: {
Label,
// Icon,
Divider
}
})
我的目标是能够从 main.js 文件中决定我要包含哪些组件,哪些不包含,而不会用所有导入语句弄乱文件。
任何关于如何做到这一点的idea/suggestion?
谢谢。
您应该可以通过以下方式导出这些组件:
import Label from ./elements/Label.vue
import Icon from ./elements/Icon.vue
import Divider from ./elements/Divider.vue
export Label
export Icon
export Divider
然后在 .vue
中选择要导入的组件:
import { Label, Divider } from ./components/semantic.js
new Vue({
el: '#app',
components: {
Label,
Divider
}
})
我会那样做,全局注册组件:
['Label', 'Icon', 'Divider']
.map(c => Vue.component(c, require(`./elements/${c}.vue`)));
如果您是忍者并且不喜欢必须创建和维护寄存器文件(如其他答案所建议的那样),那没关系。
更高级的是,您还可以围绕这段代码做一些跳舞,以在 Vue 实例级别实际注册组件。每个人都会喜欢它:
new Vue({
el: '#app',
components: {
Object.assign({},
...['Label', 'Icon', 'Divider']
.map(c => { return { [c]: require(`./elements/${c}.vue`) }; }))
}
});
附录:
为多个文件夹添加了一个解决方案,因为您要求它(并且因为这很有趣),但真正开始看起来更像垃圾而不是天才的人。即使 Angular 用户也不会想要这种语法:
Object.assign({}, ([].concat(...([
['elements', ['Label', 'Icon', 'Divider']],
['otherFolder', ['Bla', 'Blabla', 'Blablabla']],
['otherFolder/whoop', ['OtherThing', 'Foo', 'Bar']]
].map(c => c[1].map(m => { return { [m]: require(`./${c[0]}/${m}.vue`) }; })))
)));
也许你应该考虑做一个功能,或者,按照另一个人说的去做。
我正在使用语义 UI CSS 框架制作 Vue 组件。我想做的是创建一个导入所有组件的 semantic.js(或者可能是 semantic.vue)文件,然后在我的 main.js 文件中导入该 semantic.js 文件.
换句话说,类似于以下内容:
src/components/semantic.js
import Label from ./elements/Label.vue
import Icon from ./elements/Icon.vue
import Divider from ./elements/Divider.vue
// Am I supposed to export these? If so, how?
src/main.js
import Semantic from ./components/semantic.js
new Vue({
el: '#app',
components: {
Label,
// Icon,
Divider
}
})
我的目标是能够从 main.js 文件中决定我要包含哪些组件,哪些不包含,而不会用所有导入语句弄乱文件。
任何关于如何做到这一点的idea/suggestion?
谢谢。
您应该可以通过以下方式导出这些组件:
import Label from ./elements/Label.vue
import Icon from ./elements/Icon.vue
import Divider from ./elements/Divider.vue
export Label
export Icon
export Divider
然后在 .vue
中选择要导入的组件:
import { Label, Divider } from ./components/semantic.js
new Vue({
el: '#app',
components: {
Label,
Divider
}
})
我会那样做,全局注册组件:
['Label', 'Icon', 'Divider']
.map(c => Vue.component(c, require(`./elements/${c}.vue`)));
如果您是忍者并且不喜欢必须创建和维护寄存器文件(如其他答案所建议的那样),那没关系。
更高级的是,您还可以围绕这段代码做一些跳舞,以在 Vue 实例级别实际注册组件。每个人都会喜欢它:
new Vue({
el: '#app',
components: {
Object.assign({},
...['Label', 'Icon', 'Divider']
.map(c => { return { [c]: require(`./elements/${c}.vue`) }; }))
}
});
附录: 为多个文件夹添加了一个解决方案,因为您要求它(并且因为这很有趣),但真正开始看起来更像垃圾而不是天才的人。即使 Angular 用户也不会想要这种语法:
Object.assign({}, ([].concat(...([
['elements', ['Label', 'Icon', 'Divider']],
['otherFolder', ['Bla', 'Blabla', 'Blablabla']],
['otherFolder/whoop', ['OtherThing', 'Foo', 'Bar']]
].map(c => c[1].map(m => { return { [m]: require(`./${c[0]}/${m}.vue`) }; })))
)));
也许你应该考虑做一个功能,或者,按照另一个人说的去做。