vue cli3开发自己的插件发布到npm

具体流程如下:

·1、创建一个vue项目

vue create project

  2、编写组件

(1)新建一个plugins文件夹(可自行创建)

(2)新建Button组件

(3)组件挂载,为组件提供 install 方法,供组件对外按需引入

3、本地测试

//main.js中全局导入组件库
import DangeUI from './plugins'
Vue.use(DangeUI)

// 页面使用
<dan-button></dan-button>

4、打包组件

主要需要四个参数:

1、target: 默认为构建应用,改为 lib 即可启用构建库模式

2、name: 输出文件名

3、dest: 输出目录,默认为 dist,这里我们改为 lib

4、entry: 入口文件路径,默认为 src/App.vue,这里改为 src/plugin/index.js

"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "lib": "vue-cli-service build --target lib --name dange-ui --dest lib src/plugins/index.js"
  },


 执行 npm run lib 命令,编译组件

 

5、准备发布

首先需要在 package.json 添加组件信息

name: 包名,该名不能和已有的名称冲突;

version: 版本号,不能和历史版本号相同;

description: 简介; main: 入口文件,应指向编译后的包文件;

keyword:关键字,以空格分割;

author:作者;

private:是否私有,需要修改为 false 才能发布到 npm;

license:开源协议。 

"name": "dange-ui-component",
"version": "0.1.0",
"private": false,
"description": "这是一个组件",
"main": "lib/dange-ui.umd.min.js",
"license": "MIT",
"scripts": {
   "serve": "vue-cli-service serve",
   "build": "vue-cli-service build",
   "lint": "vue-cli-service lint",
   "lib": "vue-cli-service build --target lib --name dange-ui --dest lib src/plugins/index.js"
}

然后创建 .npmignore 文件,设置忽略文件

该文件的语法和 .gitignore 的语法一样,设置发布到 npm 时忽略哪些目录或文件

.DS_Store
node_modules/
examples/
packages/
public/
vue.config.js
babel.config.js
*.map
*.html

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

6、发布到npm(以下是我们内部npm)

登录账号:npm login --registry http://npm.taos.qdcares

输入用户名,密码,邮箱

发布包:npm publish

常用命令 

修改npm的配置文件

npm config set @cares:registry http://npm.tao.qdcares

删除指定npm地址的包

npm unpublish guitest --force --registry=http://npm.tao.qdcares

查看当前操作用户

npm whoami

 

发布成功后,可以去npm 查看自己发布的包

7、使用组件

npm i dange-ui-component

在main.js中全局注册

import Vue from 'vue'
import App from './App.vue'

import DangeUI from 'dange-ui-component'
import 'dange-ui-component/lib/dange-ui.css'

Vue.use(DangeUI)
Vue.config.productionTip = false

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

页面中直接使用  

<dan-button></dan-button>

注意:,这个标签与组件文件中的button.vue里的name保持一致 

8、常见问题

问题1: 401 Unauthorized - PUT https://registry.npmjs.org/vue-dialog-service --You must be logged in to publish packages

解决方法:执行登录npm login

问题2: 403 Forbidden - PUT https://registry.npmjs.org/vue-dialog-service - You do not have permission to publish “vue-dialog-service”. Are you logged in as the correct user?

解决方法:这是因为npm上有存在和你相同的name,需要修改package.js中的name

问题3:403 Forbidden - PUT https://registry.npmjs.org/vdialogservice - you must verify your email before publishing a new package: https://www.npmjs.com/email-edit

解决方法:需要邮件激活,可以登录npm去激活一次 

问题4:403 Forbidden - PUT https://registry.npmjs.org/vdialogservice - You cannot publish over the previously published versions: 0.1.0.

解决方法:需要重新发布,每次发布package.js中的version要增加一下。

问题5:如图

插件中的所有依赖文件都无法使用

解决方法:webpack中把依赖包打包成单独的js文件导致的,将一下代码注释掉就解决了

将每个依赖包打包成单独的js文件

config.optimization = {
      runtimeChunk: "single",
      splitChunks: {
        chunks: "all",
        maxInitialRequests: Infinity,
        minSize: 30000, // 依赖包超过20000bit将被单独打包
        cacheGroups: {
          vendor: {
            test: /[\\/]node_modules[\\/]/,
            name(module) {
              const packageName = module.context.match(
                /[\\/]node_modules[\\/](.*?)([\\/]|$)/
              )[1];
              return `npm.${packageName.replace("@", "")}`;
            }
          }
        }
      }
    };


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/571815.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMWare里Centos系统下使用Bonding技术实现两块网卡绑定

一、Bonding技术的好处 bonding(绑定)是一种linux系统下的网卡绑定技术&#xff0c;可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡&#xff0c;实现本地网卡的冗余&#xff0c;带宽扩容和负载均衡。 Bonding技术可以设置七中工作模式&#xff0c;常用的有…

【git学习】Git 的基本操作

文章目录 &#x1f680;创建 Git 本地仓库&#x1f680;配置 Git&#x1f680;认识⼯作区、暂存区、版本库&#x1f680;添加⽂件操作 &#x1f680;创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来。 …

WPS二次开发系列:WPS SDK打开在线文档

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 目录 需求场景 效果展示 3、实现步骤 3.1 步骤一、申…

解释PostgreSQL中的MVCC(多版本并发控制)机制是如何工作的?

文章目录 MVCC的工作原理1. 数据行版本化2. 事务ID和可见性3. 清理旧版本 解决方案&#xff1a;MVCC的优势1. 高并发性2. 避免锁竞争3. 一致性视图 示例代码 PostgreSQL中的MVCC&#xff08;多版本并发控制&#xff09;机制是一种在数据库管理系统中实现事务隔离级别的方法&…

互联网大厂ssp面经,数据结构part3

1. 哈希表的原理是什么&#xff1f;如何解决哈希碰撞问题&#xff1f; a. 原理&#xff1a;通过哈希函数将每个键映射到一个唯一的索引位置&#xff0c;然后将值存储在对应索引位置的存储桶中。 b. 关键&#xff1a;将不同的键映射到不同的索引位置&#xff0c;以实现快速的插…

Elasticsearch下载

1 最新版下载地址 Download Elasticsearch | Elastic https://www.elastic.co/cn/downloads/elasticsearch 2 其他版本下载地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch 7.9.2:https://artifacts.elastic.co/downloads/elasticsearch/elasticsear…

STM32的定时器

一、介绍 定时器的工作原理 通用定时器的介绍 定时器的计数模式 定时器时钟源 定时器溢出时间计算公式 二、使用定时器中断点亮LED灯 打开一个LED灯 更改TIME2 然后就是生成代码 三&#xff0c;代码

使用 PhpMyAdmin 安装 LAMP 服务器

使用 PhpMyAdmin 安装 LAMP 服务器非常简单。按照下面所示的步骤&#xff0c;我们将拥有一个完全可运行的 LAMP 服务器&#xff08;Linux、Apache、MySQL/MariaDB 和 PHP&#xff09;。 什么是 LAMP 服务器&#xff1f; LAMP 代表 Linux、Apache、MySQL 和 PHP。它们共同提供…

Linux网络编程---Socket编程

一、网络套接字 一个文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现。) 在通信过程中&#xff0c;套接字一定是成对出现的 套接字通讯原理示意图&#xff1a; 二、预备知识 1. 网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分 小端法&…

状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式&#xff0c;它们的主要目标都是将变化的行为封装起来&#xff0c;使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较&#xff0c;主要是因为两个设计模式的类图相似度较高。但是&#xff0c;从状态模式和策略模式的应用场景…

深入理解 Srping IOC

什么是 Spring IOC&#xff1f; IOC 全称&#xff1a;Inversion of Control&#xff0c;翻译为中文就是控制反转&#xff0c;IOC 是一种设计思想&#xff0c;IOC 容器是 Spring 框架的核心&#xff0c;它通过控制和管理对象之间的依赖关系来实现依赖注入&#xff08;Dependenc…

信息应用系统等保三级整体解决方案(精华文档Word)

建设要点目录&#xff1a; 1、系统定级与安全域 2、实施方案设计 3、安全防护体系建设规划 软件全文档&#xff0c;全方案获取方式①&#xff1a;本文末个人名片直接获取。 软件开发全系资料分享下载方式②&#xff1a;软件项目开发全套文档下载_软件开发文档下载-CSDN博客

C语言扫雷游戏完整实现(上)

文章目录 前言一、新建好头文件和源文件二、实现游戏菜单选择功能三、定义游戏函数四、初始化棋盘五、 打印棋盘函数六、布置雷函数七、玩家排雷菜单八、标记功能的菜单九、标记功能菜单的实现总结 前言 C语言从新建文件到游戏菜单&#xff0c;游戏函数&#xff0c;初始化棋盘…

【1762】java校园单车投放系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java校园单车投放管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

【Linux】文件权限类命令

在Linux中&#xff0c;文件权限是构建多用户操作系统的基础元素&#xff0c;它确保了每个用户只能在其权限范围内操作文件. 0位表示类型 在Linux中第一个字符代表这个文件是什么类型的 符号文件类型-文件d目录l链接文档 1-3位确定属主(该文件的所有者),拥有该文件的权限 4-…

【面试经典 150 | 二叉树】二叉树展开为链表

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;前序遍历方法二&#xff1a;同步进行方法三&#xff1a;原地操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&am…

图像处理的基本操作

一、PyCharm中安装OpenCV模块 二、读取图像 1、基本语法 OpenCV提供了用于读取图像的imread()方法&#xff0c;其语法如下&#xff1a; image cv2.imread&#xff08;filename&#xff0c;flags&#xff09; &#xff08;1&#xff09;image&#xff1a;是imread方法的返回…

opencv可视化图片-----c++

可视化图片 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>// 将数据类型转换为字符串 std::string opencvTool::type2str(int type) {std::string r;uchar depth type & CV_MAT_DEPTH_MASK;uchar chans 1 (typ…

机械臂模型更换成自己的urdf模块

1.将urdf生成slx文件 smimport(rm_65_flange.urdf);%生成Simscape物理模型 2.更换joint部分&#xff08;对应与几个输入几个输出&#xff09;&#xff08;依次更换&#xff09; 3.更改关节部分&#xff08;依次更换&#xff09; 找到urdf文件夹下的meshes文件夹&#xff0c;看…

Python-VBA函数之旅-issubclass函数

目录 一、issubclass函数的常见应用场景&#xff1a; 二、issubclass函数使用注意事项&#xff1a; 三、如何用好issubclass函数&#xff1f; 1、issubclass函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff…
最新文章