起步
这篇文档基于 Vue CLI 3.x 撰写,需要在 Vue CLI 2.x 下初始化项目,请移步这里。
安装
使用 CLI 创建项目以后,在项目根目录下运行:
npm i --save veui veui-theme-one
npm i --save-dev veui-loader babel-plugin-veui babel-plugin-lodash
配置
Babel 插件
VEUI 目前在 npm 上直接以源码方式进行发布,在使用时必须提前转译(其中的优缺点和取舍可以参考 Henry Zhu 在 Babel 的官方博客上发布的这篇文章)。VEUI 的源代码依赖 Lodash 和 Vue JSX 相关的 Babel 插件才能正确转译。此外,VEUI 还提供了自己的 Babel 插件,以帮助应用书写更简单的 import
语句的同时最小化代码的体积。
将项目根目录中生成的 babel.config.js
修改为:
module.exports = {
presets: [
'@vue/app'
],
plugins: [
'veui',
'lodash'
]
}
其中关于 babel-plugin-veui 的更详细信息请移步这里。
webpack Loader
VEUI 采取了样式主题与组件代码分离的开发、发布方式。组件代码对样式代码没有显式的依赖,故以源码方式引入时,需要使用 veui-loader 配置关联的主题包。
如需使用默认的样式包 veui-theme-one,我们还需要确保在 webpack 配置中引入 veui-loader
。同时由于 Less 3+ 不再默认开启内联 JavaScript 解析,而 veui-theme-one 依赖了这一功能,所以我们需要手动开启配置项。
另外,由于我们采用将 VEUI 及其依赖与项目一起打包的策略,需要手动指定相关的依赖包进行转译。
综上,我们需要在项目根目录下的 vue.config.js
中进行如下配置
const lessOptions = {
javascriptEnabled: true
}
module.exports = {
transpileDependencies: [
/[/\\]node_modules[/\\]veui[/\\]/,
/[/\\]node_modules[/\\]vue-awesome[/\\]/,
/[/\\]node_modules[/\\]resize-detector[/\\]/
],
chainWebpack: config => {
config.module
.rule('veui')
.test(/\.vue$/)
.pre()
.use('veui-loader')
.loader('veui-loader')
.tap(() => {
return {
modules: [
{
package: 'veui-theme-one',
fileName: '{module}.less'
},
{
package: 'veui-theme-one',
fileName: '{module}.js',
transform: false
}
]
}
})
const types = ['vue-modules', 'vue', 'normal-modules', 'normal']
types.forEach(type => {
config.module
.rule('less')
.oneOf(type)
.use('less-loader')
.tap(options => Object.assign({}, options, lessOptions))
})
}
}
veui-loader 选项的详细配置请参考 veui-loader 文档。
全局样式
在使用 veui-theme-one 时,需要先全局引入基础样式,包括样式的 normalize 及一些基本元素的样式。可以自行选择引入的方式。
从 JavaScript 引入:
import 'veui-theme-one/common.less'
或从样式中引入:
@import "~veui-theme-one/common.less";