为了账号安全,请及时绑定邮箱和手机立即绑定

玩转组件库搭建全流程

郭小新 Web前端工程师
难度入门
时长 2小时46分
学习人数
综合评分9.60
10人评价 查看评价
9.6 内容实用
10.0 简洁易懂
9.2 逻辑清晰
  • //在npm上发布第三方组件库

    //配置package.json

    "description":"组件库描述",
    "main":"dist/index.umd.js", //组件库入口文件
    "keywords":{  //关键词,方便用户搜索
        "mooc-ui",
        "vue",
        "ui"
    },
    "author":"Inthur", //作者
    "files": [ //需要发布的文件
        "dist",
        "components"
    ],


    //README.md对组件库描述

    https://img1.sycdn.imooc.com//62d3c98c0001fe1108280629.jpg


    //终端登录npm 发布

    npm login
    
    npm publish
    查看全部
    0 采集 收起 来源:发布到npm

    2022-07-17

  • //安装gulp

    npm i gulp gulp-sass gulp-minify-css -D


    //新建gulpfile.js

    const gulp = require('gulp');
    const sass = require('gulp-sass');
    const minifyCSS = require('gulp-minify-css');
    
    gulp.task('sass', async funtion(){
        return gulp,src('components/css/**/*.scss')
        .pipe(sass()); //将sass转成css
        .pipe(minifyCSS()); //压缩
        .pipe(gulp.dest('dist/css')); //输出到打包目录
    })


    //新建index.scss样式汇总

    @import "./demo.scss";
    @import "./card.scss";


    //在package.json中配置

    "scripts":{
        "build:css":"npx gulp sass"
        "build": "npm run build:js && npm run build:css"
    }
    查看全部
    0 采集 收起 来源:gulp打包css

    2022-07-17

  • //安装 vue-loader

    //webpack配置文件,新建webpack.component.js(自定义命名)

    const { VueLoaderPlugin } = require('vue-loader');
    const path = require('path');//绝对路径
    const glob = require('glob');//遍历
    const list = {};
    
    async function makeList(dirPath,list){
        const files = glob.sync('${dirPath}/**/index.js'); //dirPath下所有index.js路径的数组
        for(let file of files){
            const component = file.split(/[/.]/)[2]; //获取组件name
            list[component] = './${file}'; //填充list
        }
    }
    makeList('components/lib',list);
    
    //files = ['components/lib/card/index.js','components/lib/demo/index.js']
    //list = {
    //    card:'components/lib/card/index.js',
    //    demo:'components/lib/demo/index.js',
    // }
    
    
    module.exports = {
        entry: list, //入口
        mode: 'development',
        output: {
            filename: '[name].umd.js', //输出文件名
            path: path.resolve(__dirname, 'dist'),  //输出目录
            library:'mui', //配置到该字段下
            libraryTarget: 'umd' //打包成umd模块
        },
        plugins: [ //处理Vue文件
            new VueLoaderPlugin(), 
        ],
        module: {
            rules: [
                test:/\.vue$/, //对vue文件使用vue-loader
                use: [
                    {
                        loader: 'vue-loader',
                    }
                ]
            ]
        }
    }


    //package.json配置打包命令

    "scripts": {
        "build:js": "webpack --config ./webpack.component.js"
    }


    //配置组件库入口index.js

    //引入组件库中定义的所有组件
    import Demo from './demo';
    import Card from './card';
    
    const components = {
        Demo,
        Card,
    };
    
    const install = function (Vue) {
        if(install.installed) return; //避免重复安装
        Object.keys(components).forEach(key => {
            Vue.component(components[key].name, components[key]); //对所有key值用component注册
        });
    }
    
    const API = {
        install,
    }
    
    export default API; //导出


    //打包

    npm run build:js
    查看全部
  • //模块化演进过程

    http://img1.sycdn.imooc.com//62d27a8f0001cb5911770543.jpg

    http://img1.sycdn.imooc.com//62d27ad20001fea911630593.jpg


    http://img1.sycdn.imooc.com//62d27b610001207510880620.jpg

    四、文件模块化

    http://img1.sycdn.imooc.com//62d27be60001de0f05960367.jpg

    //CommonJS适用于服务端


    http://img1.sycdn.imooc.com//62d27c3700011fac10640387.jpg

    //AMD适用于浏览器


    http://img1.sycdn.imooc.com//62d27c770001b5d804840340.jpg


    http://img1.sycdn.imooc.com//62d27d080001a9dd10870500.jpg

    查看全部
    0 采集 收起 来源:前端模块化

    2022-07-16

  • //组件调用

    <m-card 
        imgSrc="img.png"
        summary="卡片概要"
    />
    <m-card     
        imgSrc="img.png"    
        summary="卡片概要">    
        <template v-slot:footer>        
            <div  class="footer">            
                <div class="level">528人报名</div>            
                <div class="price">¥299.00</div>        
            </div>    
        </template>
    </m-card>
    <m-card     
        imgSrc="img.png" 
        :width="370"
        :imgHeight="90"   
     >    
         插槽类型卡片概要
        <template v-slot:footer>        
            <div  class="footer-spring">            
                <div class="level">528人报名</div>            
                <div class="level">1096收藏</div>          
            </div>    
        </template>
    </m-card>


    <style>
    .footer{
        padding: 0 8px;
        font-size: 12px;
        text-align: left;
    }
    .level{
        color:#9199a1;
        margin-bottom: 8px;
    }
    .price{
        color:#f01414;
    }
    .footer-spring{
        display: flex;
        justify-content: space-between;
        padding: 0 8px;
        font-size: 12px;
    }
    </style>
    查看全部
    1 采集 收起 来源:测试组件

    2022-10-15

  • <template>
        <div class="m-card" :>
            <div class="m-card-img" :>
                <img :src="imgSrc" alt="img" />
            </div>
            <div v-if="summary" class="m-card-summary">
                {{summary}}
            </div>
            <div v-else class="m-card-summary">
                <slot></slot>
            </div>
            //用户自定义卡片footer
            <slot name="footer"></slot>
        </div>
    </template>
    
    <script>
    export default {
        name: 'm-card',
        props: {
            width: { //卡片宽度
                type: Number,
                default: 0,
            },
            imgSrc: { //卡片图片资源地址
                type: String,
                default: '',
            },
            imgHeight: { //卡片图片高度
                type: Number,
                default: 0,
            },
            summary: { //卡片概要
                type: String,
                default: '',
            },
        }
    }
    </script>
    .m-card{
        width:270px;
        border-radius:8px;
        background:#fff;
        overflow:hidden;
        box-shadow:0 6px 10px 0 rgba(95,101,105,0.15);
        padding-bottom:8px;
        &-img{
            height:152px;
            img{
                width:100%;
                height:100%;
            }
        }
        &-summary{
            padding:8px;
            text-align:left;
            font-size:14px;
        }
    }
    查看全部
    1 采集 收起 来源:编写逻辑代码

    2022-10-15

  • //组件通用

    http://img1.sycdn.imooc.com//62d2652e0001c03211620447.jpg

    查看全部
    0 采集 收起 来源:设计组件

    2022-07-16

  • //main.js项目入口

    //文件结构

    http://img1.sycdn.imooc.com//62d12ecf0001f18a01180196.jpg


    //vue配置 新建 vue.config.js

    module.exports = {
        pages: { //配置
            index: { //主页入口
                entry: 'examples/main.js', //入口文件
                template: 'public/index.html', //模板
                filename: 'index.html' // 文件名
            }
        }
    }


    //组件导出

    http://img1.sycdn.imooc.com//62d12f54000170a205000250.jpg


    //安装sass

    npm i sass-loader@5 -D

    npm i node-sass -D


    //main.js 引入样式和组件

    http://img1.sycdn.imooc.com//62d12fa20001f94f06890352.jpg

    http://img1.sycdn.imooc.com//62d12fc00001571306040106.jpg

    查看全部
  • // 安装脚手架

    npm install -g @vue/cli

    vue --version


    //创建项目

    vue create project-name


    //启动项目

    npm run serve

    查看全部
  • 修改vue.config.js

    此文件的详细介绍:https://www.jianshu.com/p/b358a91bdf2d

    查看全部
  • 使用vue-cli生成的项目是面向业务的,需要修改结构以适应组件库的要求。

     

    安装vue-cli


    创建一个项目


    查看全部
  • 发布

    查看全部
    0 采集 收起 来源:发布到npm

    2022-02-17

  • REDAME文件的编写

    查看全部
    0 采集 收起 来源:发布到npm

    2022-02-17

  • description:描述

    main:入口文件

    keywords:npm搜索这个包的关键字

    files:所要发布的文件,由于后期会查看源码因此将component文件也发布上去

    查看全部
    0 采集 收起 来源:发布到npm

    2022-02-17

    1. 在css文件夹下设置一个inde文件,将各个sass文件引入,这样打包出一个css文件

    2. 在package命令中重新设置命令,使js打包和css打包一起执行


    查看全部
    0 采集 收起 来源:gulp打包css

    2022-02-17

举报

0/150
提交
取消
课程须知
由于本门课程算是大家学习Vue路上的一个进阶,所以在开始前,希望同学们能掌握: 1. 基本的前端基础知识 HTML JS CSS 2. 基本的 Vue 知识
老师告诉你能学到什么?
在课程中你能学到什么? 1. 组件的设计与实现。 2. 组件库的搭建,打包及发布。 3. 组件文档的编写,以及组件库文档站点的搭建与发布。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!