search
HomeWeb Front-endFront-end Q&AHow to build a front-end public vue component library

Preface

During the development process, our page was very complex, requiring each team member to independently develop a function, and finally engage in a fight. This requires a public component library so that everyone can use common components to speed up development and improve development efficiency.

Vue.js is one of the hottest front-end frameworks at the moment and is adopted by many companies at home and abroad. Therefore, in practice, how to build a Vue.js component library suitable for your own company will become a required course for many teams that need a framework.

This article will lead you step by step to build a Vue.js component library suitable for your company for your reference.

1. Component library construction

Vue component is an abstract concept, which is to encapsulate some complex DOM structures and styles of the interface into an independent component so that multiple interfaces can reference it. It,handles respective business logic.

  1. Determine the technical solution for the component library

Before building the component library, we need to determine the technical solution for the component library. There are two common ones: introducing components through third-party libraries and self-developed components.

Introducing components through third-party libraries can use third-party component libraries to improve development efficiency and maintenance costs. The disadvantage is that it needs to comply with the specifications of third-party component libraries and has relatively poor flexibility.

Self-developed components can freely customize the component library and comply with the company's specifications, but it requires greater effort in development, maintenance and updates.

Based on the actual situation, we choose to develop components independently to facilitate management and maintenance.

  1. Initialize the project

Use Vue CLI 3 to quickly build the project skeleton.

    $ vue create my-component-lib
    $ cd my-component-lib

Here we choose manual configuration, using babel, router and vuex.

Next, we add support for less and sass to the project.

    $ npm install less less-loader node-sass sass-loader -D

After installation, we can create a new assets folder under the src folder and add a style file index.less for style control of the entire component library.

  1. Develop components

Under the src folder, create a components folder to place the developed components. At the same time, in order to facilitate maintenance and viewing, we can create another index.js file under the component folder. Each component requires a separate folder for management.

Here we write a sample component of HelloWord.vue to demonstrate the development of the component library.

    <template>
      <div class="hello-world">
        <h1 id="Hello-World">Hello World</h1>
        <p>{{ message }}</p>
      </div>
    </template>

    <script>
    export default {
      name: 'HelloWorld',
      props: {
        message: {
          type: String,
          default: 'Welcome to Your Vue.js App'
        }
      }
    }
    </script>

    <style scoped>
    .hello-world {
      font-size: 14px;
      line-height: 24px;
      color: #333;
    }
    </style>

Note: The CSS style of the component needs to add the scoped attribute so that the style of the current component does not affect other components.

  1. Registering components

There are two main ways to register components: global registration and local registration.

Global registration allows us to reference components anywhere, while local registration can only be used within the current component. Of course, for the convenience of management, we will register the components in a special file.

Register the component in the project entry file src/main.js:

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    import HelloWorld from '@/components/HelloWorld'

    Vue.config.productionTip = false

    Vue.component('HelloWorld', HelloWorld)

    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')

At this point, we can use the HelloWorld component in the project.

    <template>
      <div class="container">
        <helloworld message="Welcome to my component library"></helloworld>
      </div>
    </template>

2. Component library release

After the component library is developed, we need to publish it to npm so that developers can download and use our component library through npm.

  1. Configure packaging commands

In the package.json file, add the following command:

    "scripts": {
      "serve": "vue-cli-service serve",
      "build": "vue-cli-service build",
      "lib": "vue-cli-service build --target lib --name my-component-lib ./src/components/index.js"
    }

In the above command, we have customized a The lib command is used to package component libraries, and the files generated after packaging will be placed in the dist folder.

  1. Custom packaging configuration

In order to make the packaged components more suitable for use, we need to create a new vue.config.js file in the project root directory and add The following code:

    module.exports = {
      // 组件库名称
      outputDir: 'my-component-lib',
    
      // 配置打包的全局入口组件
      configureWebpack: {
        output: {
          libraryExport: 'default'
        },
        externals: {
          vue: {
            root: 'Vue',
            commonjs: 'vue',
            commonjs2: 'vue',
            amd: 'vue'
          }
        }
      },
    
      // 配置如何处理一些特殊的 CSS,如全局 CSS 的提取
      css: {
        extract: {
          filename: 'css/[name].css'
        }
      }
    }

Among them, the outputDir parameter represents the packaging output directory; the configureWebpack parameter represents the webpack configuration. You need to set the packaged entry and libraryExport to default, so that when introducing the component library, you only need to import X from 'my-component -lib' is enough, and there is no need to import default from X; the externals parameter represents the webpack configuration, and the imported Vue.js is ignored.

  1. Component library release

Execute the npm run lib command to package the component library:

    $ npm run lib

After the packaging is completed, publish it to npm:

    $ npm login
    $ npm publish

In other projects, install the component library through npm install my-component-lib:

    import HelloWorld from 'my-component-lib/components/HelloWorld'

    Vue.component('HelloWorld', HelloWorld)

3. Component library version management

When developing the component library, version management Very important. If we do not manage component library versions, we will have no way to deal with bugs once they are discovered. Moreover, there will inevitably be version iteration issues during the development process. If versions are not managed, it will be very confusing and affect the team's development efficiency.

The version management method is based on Git branch management. Each version corresponds to a branch on Git. During the development process, each branch needs to be developed and tested accordingly, and finally merged into the main branch to release the version. .

4. Conclusion

Through the introduction of this article, I believe everyone already knows how to build a Vue.js component library suitable for their own company, and successfully publish and use it on npm. The development of component libraries is one of the problems that the front-end development team needs to solve. Therefore, we need to flexibly master the relevant knowledge of component library development and management to contribute to the development of the company and itself.

The above is the detailed content of How to build a front-end public vue component library. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What are the limitations of React?What are the limitations of React?May 02, 2025 am 12:26 AM

React'slimitationsinclude:1)asteeplearningcurveduetoitsvastecosystem,2)SEOchallengeswithclient-siderendering,3)potentialperformanceissuesinlargeapplications,4)complexstatemanagementasappsgrow,and5)theneedtokeepupwithitsrapidevolution.Thesefactorsshou

React's Learning Curve: Challenges for New DevelopersReact's Learning Curve: Challenges for New DevelopersMay 02, 2025 am 12:24 AM

Reactischallengingforbeginnersduetoitssteeplearningcurveandparadigmshifttocomponent-basedarchitecture.1)Startwithofficialdocumentationforasolidfoundation.2)UnderstandJSXandhowtoembedJavaScriptwithinit.3)Learntousefunctionalcomponentswithhooksforstate

Generating Stable and Unique Keys for Dynamic Lists in ReactGenerating Stable and Unique Keys for Dynamic Lists in ReactMay 02, 2025 am 12:22 AM

ThecorechallengeingeneratingstableanduniquekeysfordynamiclistsinReactisensuringconsistentidentifiersacrossre-rendersforefficientDOMupdates.1)Usenaturalkeyswhenpossible,astheyarereliableifuniqueandstable.2)Generatesynthetickeysbasedonmultipleattribute

JavaScript Fatigue: Staying Current with React and Its ToolsJavaScript Fatigue: Staying Current with React and Its ToolsMay 02, 2025 am 12:19 AM

JavaScriptfatigueinReactismanageablewithstrategieslikejust-in-timelearningandcuratedinformationsources.1)Learnwhatyouneedwhenyouneedit,focusingonprojectrelevance.2)FollowkeyblogsliketheofficialReactblogandengagewithcommunitieslikeReactifluxonDiscordt

Testing Components That Use the useState() HookTesting Components That Use the useState() HookMay 02, 2025 am 12:13 AM

TotestReactcomponentsusingtheuseStatehook,useJestandReactTestingLibrarytosimulateinteractionsandverifystatechangesintheUI.1)Renderthecomponentandcheckinitialstate.2)Simulateuserinteractionslikeclicksorformsubmissions.3)Verifytheupdatedstatereflectsin

Keys in React: A Deep Dive into Performance Optimization TechniquesKeys in React: A Deep Dive into Performance Optimization TechniquesMay 01, 2025 am 12:25 AM

KeysinReactarecrucialforoptimizingperformancebyaidinginefficientlistupdates.1)Usekeystoidentifyandtracklistelements.2)Avoidusingarrayindicesaskeystopreventperformanceissues.3)Choosestableidentifierslikeitem.idtomaintaincomponentstateandimproveperform

What are keys in React?What are keys in React?May 01, 2025 am 12:25 AM

Reactkeysareuniqueidentifiersusedwhenrenderingliststoimprovereconciliationefficiency.1)TheyhelpReacttrackchangesinlistitems,2)usingstableanduniqueidentifierslikeitemIDsisrecommended,3)avoidusingarrayindicesaskeystopreventissueswithreordering,and4)ens

The Importance of Unique Keys in React: Avoiding Common PitfallsThe Importance of Unique Keys in React: Avoiding Common PitfallsMay 01, 2025 am 12:19 AM

UniquekeysarecrucialinReactforoptimizingrenderingandmaintainingcomponentstateintegrity.1)Useanaturaluniqueidentifierfromyourdataifavailable.2)Ifnonaturalidentifierexists,generateauniquekeyusingalibrarylikeuuid.3)Avoidusingarrayindicesaskeys,especiall

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment