背景

上一篇我们学习写了一个不依赖第三方组件的事例组件,这次我们就实际写一个基于element-ui的数字输入框

第一次尝试

我们在demo组件中引入我们封装好的基于el-input封装的数字输入框,然后直接运行,我们会发现,浏览中报错了,找不到el-inputimage.png
然后我们像引入封装好的组件一样,将element-ui的el-input组件引入到demo中,还是报一样的错误
这个时候我们分析一下,vuepress其实是帮我们新建了一个vue项目,这个vuepress的vue项目创建到我们组件库的docs文件夹下,它是跟组件库的配置完全隔离开的,它就像是使用组件库的宿主环境一样,要想使用我们的组件库,其实就需要单独引入element-ui,因此,vuepress给我提供了一个配置文件——.vuepress/enhanceApp.js

当enhanceApp文件存在时,会被导入到应用内部enhanceApp.js应该export default一个钩子函数,并接受一个包含了一些应用级别属性的对象作为参数。

因此我们可以在enhanceApp.js文件中做如下配置:

  1. import ElementUI from 'element-ui';
  2. import 'element-ui/lib/theme-chalk/index.css';
  3. import XlNumberInput from '../../packages/xl-number-input/index.js';
  4. export default ({
  5. // VuePress 正在使用的 Vue 构造函数
  6. Vue
  7. }) => {
  8. // ...做一些其他的应用级别的优化
  9. Vue.use(ElementUI);
  10. Vue.use(JlNumberInput);
  11. }

为的就是将element-ui进行导入,并且是一个全局设置,其实这儿我们也可以按需引入element-ui,这样更好,这样我们可以减小打包后的体积
通过上面的配置,我们的base.vue文件就可以减少一定的代码量了:

  1. <template>
  2. <demo-block>
  3. <xl-number-input v-model="input"></xl-number-input>
  4. </demo-block>
  5. </template>
  6. <script>
  7. export default {
  8. name: 'number-input-demo',
  9. data() {
  10. return {
  11. input: ''
  12. }
  13. }
  14. };
  15. </script>

接下来我们再写一个demo
新建.vuepress/components/number-input/twoNum.vue文件,里面是另外一个numberInput例子:

  1. <template>
  2. <demo-block>
  3. <xl-number-input v-model="input" reg="twoNum"></xl-number-input>
  4. </demo-block>
  5. </template>
  6. <script>
  7. export default {
  8. name: 'number-input-twoNum',
  9. data() {
  10. return {
  11. input: ''
  12. }
  13. }
  14. };
  15. </script>

然后在md文件中再引入一个标签,进行事例展示:

  1. ### 两位小数
  2. <ClientOnly>
  3. <number-input-twoNum></number-input-twoNum>
  4. </ClientOnly>
  5. ::: tip
  6. 两位小数的数字,通过reg属性来进行设置
  7. :::
  8. ```vue
  9. <template>
  10. <xl-number-input v-model="input" reg="twoNum"></xl-number-input>
  11. </template>
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. input: ''
  17. }
  18. }
  19. }
  20. </script>

``` 最后运行起来就更像element-ui文档了
image.png

所以以后我们的demo中想要使用一些第三方库,是可以直接在这里做全局引入的,值得注意的是,我们有些第三方库是不适合在这儿做全局引入的,下一篇我们会举个例子:vuepress踩坑