模块系统(待更新)

我与影子孤独终老i 提交于 2020-01-23 00:17:01

如果你使用了 webpack (或在内部使用了 webpack 的 Vue CLI 3+),那么就可以使用 require.context 只全局注册这些非常通用的基础组件。这里有一份可以让你在应用入口文件(比如 src/main.js) 中全局导入基础组件的示例代码:

import Vue from 'vue'
import upperFirst from 'lodash/upperFirsh'
import camelCase from ‘lodash/camelCase’

const requireComponent = require.context(
	// 其组件目录的相对路径./components’,
	// 是否查询器子目录
	false,
	// 匹配基础组件文件名的正则表达式
	/Base[A-Z]\w+\.(vue|js)$/,
);

requireComponent.keys().forEach(fileName => {
	// 获取组件配置
	const componentConfig  = requireComponent(fileName);
	// 获取组件的 PascalCase 命名
	const componentName = upperFirst(
		camelCase(
			// 获取和目录深度无关的文件名
			fileName
				.split('/')
				.pop()
				.replace(/\.\w+$/, '')
		);
	)
	
	// 全局注册组件
	Vue.component(
		componentName,
		// 如果这个组件选项是通过 `export default` 导出的
		// 那么就会优先使用 `.default`
		// 否则回退到使用模块的根。
		componentConfig.default || componentConfig,
	)
});

全局注册的行为必须在根 Vue 实例(通过 new Vue)创建之前发生。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!