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

server/2024/10/18 12:28:20/

具体流程如下:

·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 = falsenew 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.ppmy.cn/server/14467.html

相关文章

【TikTok】美区TK矩阵引流系统有哪些深度测评方案?

TikTok的现状运营列举&#xff0c;条条都是干货&#xff0c;想玩全球TK的可以花点时间看看。 一&#xff0c;TIKTOK在美国一直很火&#xff0c;但是在小众国家人气就一般般。现在北美区的小店还可以卖服务和虚拟商品&#xff0c;是全球颇具特色的。 二&#xff0c;可由于不是实…

浅析Java中的LinkedList和ArrayList特点和底层

本期经验 LinkedList适合于删除和插入元素的操作&#xff0c;对首元素和尾元素的删除和修改插入极好&#xff0c;ArrayList适合于元素的修改和查询。 LinkedList LinkedList的底层使用双向链表来写&#xff0c;这导致其每次查询和修改元素都必须从首元素开始以此往下找&…

怎么理解Fiber,Fiber解决了什么问题

问题 JavaScript引擎和浏览器的渲染引擎两个线程是互斥的,当有一个线程在执行的时候,另一个线程只能挂起等待。 如果JavaScript线程长时间占用主线程,那么渲染引擎的线程就得长时间等待,页面长时间不更新,会导致页面的响应度变差,给用户的感觉就是页面很卡。 这也是Re…

再谈C语言——理解指针(四)

assert断⾔ assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终⽌运⾏。这个宏常常被称为“断⾔”。 assert(p ! NULL); 上⾯代码在程序运⾏到这⼀⾏语句时&#xff0c;验证变量 p 是否等于 NULL 。…

Android 获取sha1的快速有效的简单方法

第一步 下载apk 点击下载&#xff08;https://download.csdn.net/download/xiaohui2015/9751428&#xff09; 第二步 试用Windows键R键打开命令行 输入 adb install把apk用鼠标左键拖动到命令行自动输入路径 回车安装 第三步 打开apk 选择你要查看的apk&#xff0c;一键…

Json-server 模拟后端接口

json-server&#xff0c;模拟rest接口&#xff0c;自动生成增删改查接口。(官网地址&#xff1a;json-server - npm) 使用方法&#xff1a; 1. 安装json-server&#xff0c;npm i json-server -g 2. 创建json文件&#xff0c;文件中存储list数据&#xff0c;db.json {"…

碎碎笔记01

1. 多元线性回归 通过现有数据&#xff0c;总结出数据所对应的线性方程的斜率与截距 f ( x 1 , x 2 , . . . , x n ) w 1 x 1 w 2 x 2 . . . w n x n b f(x_1, x_2, ..., x_n) w_1x_1 w_2x_2 ... w_nx_n b f(x1​,x2​,...,xn​)w1​x1​w2​x2​...wn​xn​b w&a…

HTTP如何自动跳转到HTTPS,免费SSL证书如何获取

如今HTTPS已经成为了网站标配&#xff0c;然而&#xff0c;对于一些刚刚起步的网站或是个人博客而言&#xff0c;如何自动跳转到HTTPS&#xff0c;以及免费SSL证书的获取&#xff0c;可能还是一个需要解决的问题。下面就来详细解答这两个问题。 我们需要先了解HTTP与HTTPS的区…