vue组件发布成npm包

 更新时间:2024年01月26日 10:48:51   作者:YUJIAN。  
平常使用Vue开发时,一个项目中多个地方需要用到的相同组件通常我们会封装为一个公共组件,所以我们可以将封装好的组件打包发布至npm,本文主要介绍了vue组件发布成npm包,具有一定的参考价值,感兴趣的可以了解一下

前言

工作中多个项目用到了同一个组件,每次修复bug或者增加新功能后都需要同步更新每个项目的代码,然后想到可以通过发布成npm包的形式来实现代码统一。此文以苹果电脑为例,如果是windows系统,可能略有差别。

一、环境准备

1.首先最基本的需要安装nodejs,版本推荐 v10 以上,因为需要安装vue-cli

2.安装vue-cli

npm install -g @vue/cli

可能会报错,如下:

在这里插入图片描述

这是因为没有权限,重新执行如下命令:

sudo npm install -g @vue/cli

在这里插入图片描述

输入密码,按回车即可

二、初始化项目

1.构建项目

vue create vue-link-demo

这里可以选择vue2或者vue3,我这里选择的vue3

在这里插入图片描述

构建完成后的目录如下:

在这里插入图片描述

2.开发组件/加入组件

可以将已经编写好的组件移动到components目录下,或者新建一个vue组件,步骤是一样的。

例如我这里新建了一个HelloWorld.vue组件,需要注意的是,组件必须有name,这将会是用户使用的组件名称

在这里插入图片描述

然后修改App.vue

在这里插入图片描述

运行项目npm run serve,可以看到正常运行

在这里插入图片描述

最后一步,增加在src文件夹下新建index.js文件

// src/index.js
import HellowWorld from '@/components/HellowWorld.vue';
 
// 将引入的组件模块存储,如果是组件库,则在这里引入多个组件即可
const components = [ HellowWorld ];
 
const install = (Vue,options) => {
  if (install.installed) return;
  install.installed = true
  components.forEach(component => {
  // 这里可以看出,为什么上文强调组件必须有name
    Vue.component(component.name, component)
  })
}
// 如果是直接引入的vue.js方式,则会挂到window下
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}
export default {
  // 使用Vue.use必须具有install方法
  // https://cn.vuejs.org/v2/api/#Vue-use
  install,
  ...components
}

3. 修改配置文件

将项目根目录下的package.json文件:

1. scripts修改start和build命令:

```c
"scripts": {
    "serve": "vue-cli-service serve",
    "start": "vue-cli-service build --target lib --name vue-link-demo --dest lib src/index.js --watch",
    "build": "vue-cli-service build --target lib --name vue-link-demo --dest lib src/index.js",
    "build:app": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  }

这里的–target lib是 vue-cli 自带的打包命令,此命令会将入口文件打包成一个库码,具体可参考官网说明vue-cli官方文档–name 指的是打包后的文件名
–dest 指文件夹的名称

紧跟的src/index.js 指的是执行上文新建的index文件,暴露install方法

在这里插入图片描述

执行命令

npm run start

执行成功之后会在项目根目录增加lib文件夹:

在这里插入图片描述

如果组件库过大,可能会报错:allocation failure scavenge might not succeed。可以通过关闭内联css(下文有介绍)或者修改--max_old_space_size=10000(可自行百度)尝试解决

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  // 为false则强制内联,区别是最终lib文件夹中不会生成单独的css文件
  // 设置为true,则不会内联css,最红lib文件如上图会有单独的css文件生成,用户使用组件包时需要在main.js中手动引入:import 'vue-libs-demo/lib/vue-libs-demo.css'
  css: { extract: true }
})
  • 修改package.json文件中main配置项——外部访问项目包的入口文件;
// 最终lib文件夹生成的umd.js
"main": "lib/vue-link-demo.umd.js"

三、调试

1、执行打包命令

// 开发环境执行
npm run start 
// 正式发布执行 npm run build

2、发布本地连接包

npm link

3、测试项目

按上面构建项目的步骤重新新建一个项目用于测试(或者用随便一个就项目都行),然后在测试项目的目录终端执行

npm link vue-link-demo

然后修改测试项目的main.js:

import olMap from 'ol-map-vue'
import 'ol-map-vue/lib/ol-map.css'
const app = createApp(App)
app.use(olMap)
app.mount('#app')
// 如果为vue2写法略有不同哦

在App.vue中使用:

<template>
  <div class="container">
    <HelloWorld msg="测试组件" />
  </div>
</template>

然后运行项目

npm run serve

四、发布使用

测试没问题后就可以发布到nodejs了

1、注册

注册npm账号 点击注册

2、本地登陆

按步骤注册完成以后,打开命令行工具,并定位到项目目录
中间会需要输入用户名、密码、邮箱、邮箱验证码

在这里插入图片描述

如果中间出错的话,可能是由于设置了淘宝镜像,重新设置一下即可:

npm config set registry https://registry.npmjs.org/

3、发布

执行命令

npm publish

在这里插入图片描述

显示正在发布中。
可能会报错如下,是由于命名冲突了:

在这里插入图片描述

验证是否是由于命名问题导致的,可以执行命令:

npm view react

在这里插入图片描述

果不其然,修改名称即可。修改完后重新发布npm publish

在这里插入图片描述

最后一行出现 +包名@版本号 即表示发布成功了
登陆npmjs,可以看到发布成功了。

在这里插入图片描述

4.使用

在测试项目中卸载连接包

npm unlink vue-link-demo

然后安装发布成功的包

npm install vue-link-demo --save

最后运行

npm run serve

可以正确显示即表示成功。
中间可能会出现一些问题,但是如果按照文章的步骤来,流程应该是没错的,可以排查一下代码错误。

到此这篇关于vue组件发布成npm包的文章就介绍到这了,更多相关vue发布成npm包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue.js实现的购物车功能详解

    Vue.js实现的购物车功能详解

    这篇文章主要介绍了Vue.js实现的购物车功能,结合实例形式分析了vue.js购物车的原理、数值计算及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下
    2019-01-01
  • vue中v-html妙用及空白行消除方式

    vue中v-html妙用及空白行消除方式

    这篇文章主要介绍了vue中v-html妙用及空白行消除方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 在vue项目中promise解决回调地狱和并发请求的问题

    在vue项目中promise解决回调地狱和并发请求的问题

    这篇文章主要介绍了在vue项目中promise解决回调地狱和并发请求的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 基于Vue-cli快速搭建项目的完整步骤

    基于Vue-cli快速搭建项目的完整步骤

    这篇文章主要给大家介绍了关于如何基于Vue-cli快速搭建项目的完整步骤,文中通过示例代码以及图片将搭建的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 使用Vue 自定义文件选择器组件的实例代码

    使用Vue 自定义文件选择器组件的实例代码

    这篇文章主要介绍了使用Vue 自定义文件选择器组件的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • vue中将网页打印成pdf实例代码

    vue中将网页打印成pdf实例代码

    本篇文章主要介绍了vue中将网页打印成pdf实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 在vue中实现点击选择框阻止弹出层消失的方法

    在vue中实现点击选择框阻止弹出层消失的方法

    今天小编就为大家分享一篇在vue中实现点击选择框阻止弹出层消失的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue3点击出现弹窗后背景变暗且不可操作的实现代码

    vue3点击出现弹窗后背景变暗且不可操作的实现代码

    这篇文章主要介绍了vue3点击出现弹窗后背景变暗且不可操作的实现代码,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue中子组件传递数据给父组件的讲解

    vue中子组件传递数据给父组件的讲解

    今天小编就为大家分享一篇关于vue中子组件传递数据给父组件的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • vue项目启动时无法识别es6的扩展语法的解决

    vue项目启动时无法识别es6的扩展语法的解决

    启动项目时遇到ES6的拓展运算符报错可以通过切换到淘宝镜像,以及在项目根目录下新增.babelrc和postcss.config.js文件来解决,这些操作有助于正确配置项目环境,从而避免报错,并保证项目的顺利运行,希望这些经验能够帮助到遇到相同问题的开发者
    2024-10-10

最新评论