我的编程空间,编程开发者的网络收藏夹
学习永远不晚

webpack怎么打包一个按需引入的vue组件库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

webpack怎么打包一个按需引入的vue组件库

这篇文章给大家分享的是有关webpack怎么打包一个按需引入的vue组件库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    在项目中使用vue组件库的一般姿势

    • 通过import引入,并在入口文件main.js里使用Vue.use方法完成组件的全局注册,便可在任何单文件组件中直接使用。如下

    import Vue from "vue"import App from "./App.vue"import mylib from "mylib"Vue.use(mylib)new Vue({  render: h => h(App)}).$mount("#app");
    • 上面的方式看似是一劳永逸,可随着组件库越发的壮大,会出现我引入了整个组件库代码,但我在目前的项目里只使用了其中一小部分组件,但在项目最终打包的时候却把组件库里所有的组件代码都打包进了bundle文件里,影响了最终代码体积,这明显是不合理的。所以便有了按需引入组件库的方式,这里我们参考element-ui的按需引入方式,如下。

    webpack怎么打包一个按需引入的vue组件库

    接下来,如果你只希望引入部分组件,比如 Button 和 Select,那么需要在 main.js 中写入以下内容:

    import Vue from 'vue'; import { Button, Select } from 'element-ui'; import App from './App.vue'; Vue.component(Button.name, Button); Vue.component(Select.name, Select);  new Vue({    el: '#app',     render: h => h(App) });

    为什么这样具名导入组件就可以做到按需引入呢?其实是babel-plugin-component插件帮我们完成了转换的工作。在babel-plugin-component内部会把

    import { Button, Select } from 'element-ui';

    转换成

    var button = require('element-ui/lib/button')var select = require('element-ui/lib/select')require('element-ui/lib/theme-chalk/button/style.css')require('element-ui/lib/theme-chalk/select/style.css')

    上面的element-ui是组件库名,theme-chalk是组件库样式所在的文件夹名,都是可以配置的。buttonselect是组件名,lib是babel-plugin-component插件默认寻找组件的文件夹。

    webpack实现可按需引入的组件库

    npm init创建项目,因为是每个组件单独打包,所以每个组件都导出一个函数,再Vue.use()的时候执行这个函数,完成组件的全局注册。项目目录结构如下

    webpack怎么打包一个按需引入的vue组件库

    components/navbar/navbar.vue<template>  <div class="header__all">{{text}}</div></template><script>export default {  name: "navbar",  props: {    text: String  }};</script><style rel="stylesheet/scss" lang="scss" scoped>.header__all{    background-color: #000000;    color: #FFFFFF;    display: flex;    justify-content: center;    align-items: center;    height: 50px;    width: 100%;}</style>
    components/navbar/index.jsimport navbar from "./navbar.vue";export default function(Vue) {    Vue.component(navbar.name,navbar);}
    class="lazy" data-src/index.jsimport navbar from "./components/navbar"function install(Vue){  Vue.use(navbar)}if(window && window.Vue) {  Vue.use(install)}export default install

    接下来就是使用webpack打包

    • 先安装所有需要用到的依赖

    npm i -D webpack webpack-cli babel-loader @babel/core @babel/preset-env babel-plugin-component clean-webpack-plugin css-loader mini-css-extract-plugin node-sass postcss postcss-loader autoprefixer cssnano sass-loader terser-webpack-plugin vue-loader vue-template-compiler
    • 配置webpack.config.js

    const path = require('path')const TerserPlugin = require("terser-webpack-plugin");const { CleanWebpackPlugin } = require("clean-webpack-plugin")const { VueLoaderPlugin } = require('vue-loader')const MiniCssExtractPlugin = require('mini-css-extract-plugin')module.exports = {  mode: 'none',  entry: {    'navbar': './class="lazy" data-src/components/navbar/index.js',    'navbar.min': './class="lazy" data-src/components/navbar/index.js',    'test-lib': './class="lazy" data-src/index.js',    'test-lib.min': './class="lazy" data-src/index.js'      },  output: {    path: path.join(__dirname,"/lib"),    filename: '[name].js',    libraryTarget: 'umd',    library: '[name]',    libraryExport: 'default'  },//   externals:[],  optimization: {    minimize: true,    minimizer: [        new TerserPlugin({            test: /\.min\.js$/,        }),    ],  },  module: {    rules: [      {        test: /\.vue$/,        use:  ['vue-loader']      },      {        test: /\.css$/,        use:  [MiniCssExtractPlugin.loader,'css-loader','postcss-loader']      },      {          test: /\.s[ac]ss$/i,          use:  [MiniCssExtractPlugin.loader,'css-loader','postcss-loader','sass-loader']      },      {        test: /\.js$/,        exclude: /node_modules/,        use:{            loader: 'babel-loader',            options: {                cacheDirectory: true            }        }              }    ]  },  plugins: [    new VueLoaderPlugin(),    new CleanWebpackPlugin(),    new MiniCssExtractPlugin({        filename: 'lib-style/[name].css'    })  ]}
    • 更改package.json的main字段,并往scripts里添加打包命令

    "main": "./lib/test-lib.min.js","scripts": {    "build": "webpack --config webpack.config.js"}
    • 执行 npm run build 打包组件库,成功后项目多了个lib文件夹,存放打包后组件库的代码。lib文件夹里每个文件都有一个对应的.min文件,.min文件分别用terser-webpack-plugin插件和cssnano压缩。

    webpack怎么打包一个按需引入的vue组件库

    调试组件库

    有两种方式可调试本地的组件库

    • 新建test.html,然后以

    • vuecli新建个测试项目,然后通过npm link的方式链接到测试项目中去使用

    这里展示就使用最粗暴的方式一,新建test.html,npm link各位看官老爷可以自己去尝试下。

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <link rel="stylesheet" href="./lib/lib-style/test-lib.min.css" rel="external nofollow" ></head><body>    <div id="app">        <navbar text="header"></navbar>    </div></body><script class="lazy" data-src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script class="lazy" data-src="./lib/test-lib.min.js"></script><script>    new Vue({        el: '#app'    })</script></html>

    测试结果:

    webpack怎么打包一个按需引入的vue组件库

    到这一步,至少说明代码构建没什么大问题,但按需引入功能还没验收,接下来我们就继续把组件库发布到npm上,完全效仿element-ui的使用方式在vuecli项目中使用,看看实现的效果如何。

    npm 发布

    步骤非常简单,只需4步

    • 在npm官网注册账号并验证邮箱。

    • 在命令行中输入 npm login 完成登录。

    • 如果npm使用的是淘宝镜像源,需要切回npm源。

    • 进入需要发布的项目目录执行npm publish 发布。

    完成后,接着就在测试项目里 npm install 安装我们自己的组件库。

    调试组件库按需引入

    在测试项目里的babel.config.js,添加babel-plugin-component配置,并重启项目。
    babel-plugin-component基本配置参考

    // babel.config.jsmodule.exports = {  presets: ["@vue/cli-plugin-babel/preset"],  plugins: [    [      'component',      {        libraryName: 'element-ui',        styleLibraryName: 'theme-chalk'      },      'element-ui'    ],    [      'component',      {        libraryName: 'test-lib',        styleLibrary: {          "name": "lib-style", // same with styleLibraryName          "base": false  // if theme package has a base.css        }      },      'test-lib'    ],  ]};

    在test.vue中使用组件库

    <template><div>  <navbar :text="msg"></navbar>  <el-button type="primary" class="dg-margin-t-20">element-button</el-button></div></template><script>import Vue from "vue";import { navbar } from "juejintest-lib";import { button } from "element-ui";Vue.use(navbar)Vue.use(button)export default {  data:function() {      return {          msg: 'text'      }  }};</script><style lang="scss">.dg-margin-t-20{    margin-top:20px;}</style>

    webpack怎么打包一个按需引入的vue组件库

    感谢各位的阅读!关于“webpack怎么打包一个按需引入的vue组件库”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    webpack怎么打包一个按需引入的vue组件库

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    webpack怎么打包一个按需引入的vue组件库

    这篇文章给大家分享的是有关webpack怎么打包一个按需引入的vue组件库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在项目中使用vue组件库的一般姿势1、通过import引入,并在入口文件main.js里使用
    2023-06-29

    Vue组件怎么自动按需引入

    这篇文章主要为大家展示了“Vue组件怎么自动按需引入”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue组件怎么自动按需引入”这篇文章吧。在Vue中我们可以通过全局组件、局部注册的方式来使用组件
    2023-06-22

    Vue3怎么使用glup打包组件库并实现按需加载

    这篇文章主要介绍“Vue3怎么使用glup打包组件库并实现按需加载”,在日常操作中,相信很多人在Vue3怎么使用glup打包组件库并实现按需加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3怎么使用g
    2023-07-05

    vue组件引用另一个组件出现组件不显示的问题怎么解决

    这篇文章主要介绍了vue组件引用另一个组件出现组件不显示的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue组件引用另一个组件出现组件不显示的问题怎么解决文章都会有所收获,下面我们一起来看看吧。组
    2023-06-30

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录