如何发布自己的npm包

发布一个简单的npm包

  1. 首先创建一个文件夹(唯一的命名)
  2. 创建package.json包,输出npm init,一直回车就好。
  3. 创建index.js文件,向外暴露方法。

将包上传或更新到 npm 

执行登录命令:npm login
登录npm官网,根据提示输入用户名和密码,邮箱(邮箱必须在注册时进行验证)

 发布版本,在登陆命令后接着输入如下命令

npm publish

 发布上传后,你可以去 npm 官网上查一下自己的包有没有存在。

 

 在项目中安装你的包

npm i xxx -s,在main.js中引用

 

 在vue项目任何页面使用

 发布一个自己组件包

1、在项目中添加组件库文件夹:

在根目录下新建一个plugins文件夹,用来放组件,项目文件结构为:
 (我的是跟src平级 创建plugins组件文件夹)

 2、添加配置文件

项目根目录下面添加vue.config.js文件,写入以下内容:(主要是配置webpack的打包)

 3、编写组件

把封装的组件、封装的指令和封装的过滤器每个都写在分类文件夹中,后面在合理添加并继续封装。下面我以datetime这个组件为例:(是一个时间显示组件)

建组件date-time.vue和单独暴露组件的index.js文件:

 date-time.vue内容如下:

<template><div class="date-time" :style="{ 'font-size': `${useStyleObj.fontSize}px` }"><p :style="styleObject">{{ nowDate }}</p><p :style="styleObject">{{ nowTime }}</p></div>
</template>
<script>
export default {name: "dateTime",props: {styleObj: {//客户端传递的样式type: Object,default: () => ({fontSize: 25,color: ["#dcedff", "#5ca9ff"]})}},computed: {useStyleObj() {//用computed是为了暴露客户端的styleObj样式属性值可以选填,更加灵活let size = 25;let color = ["#dcedff", "#5ca9ff"];if (this.styleObj.fontSize) {size = this.styleObj.fontSize;}if (this.styleObj.color) {color = this.styleObj.color;}return {fontSize: size,color: color};},styleObject() {//根据客户端传递的样式值配置文字的渐变色return {background: `linear-gradient(180deg,${this.useStyleObj["color"][0]},${this.useStyleObj.color.length > 1? this.useStyleObj["color"][1]: this.useStyleObj["color"][0]})`,"-webkit-background-clip": "text"};}},data() {return {timer: null,nowWeek: "",nowDate: "",nowTime: ""//   styleBox: {}};},created() {this.timer = setInterval(() => {this.setNowTimes();}, 1000); //时间},beforeDestroy: function() {if (this.timer) {clearInterval(this.timer);}},methods: {setNowTimes() {//时间拼接方法const myDate = new Date();const wk = myDate.getDay();const yy = String(myDate.getFullYear());const mm = myDate.getMonth() + 1;const dd = String(myDate.getDate() < 10 ? `0${myDate.getDate()}` : myDate.getDate());const hou = String(myDate.getHours() < 10 ? `0${myDate.getHours()}` : myDate.getHours());const min = String(myDate.getMinutes() < 10? `0${myDate.getMinutes()}`: myDate.getMinutes());const sec = String(myDate.getSeconds() < 10? `0${myDate.getSeconds()}`: myDate.getSeconds());const weeks = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];const week = weeks[wk];this.nowDate = `${yy}/${mm}/${dd} ${week}`;this.nowTime = `${hou}:${min}:${sec}`;this.nowWeek = week;}}
};
//样式文件
</script>
<style lang="scss" scoped></style>

index.js文件内容:为组件提供 install 方法,供组件对外按需引入

import dateTimes from "./date-time.vue";dateTimes.install = Vue => Vue.component(dateTimes.name, dateTimes); //注册组件export default dateTimes;

这个单独暴露组件的 index.js,意思是如果这个工程值封装一个组件使用的话,就用这个index.js 文件暴露 install 即可了。 

plugins 文件夹下面新建一个 index.js 文件,为了统一导出所有组件及暴露 install 方法。之前的 index.js 只是安装单个组件,而现在这个 index.js 是循环安装所有组件、所有指令、过滤器统一暴露出去,可以按需引用组件,此时plugins文件夹的内容为:

 我这里是统一暴露组件、指令、过滤器:

//组件
import DateTime from "./components/dateTime/date-time.vue"//所有组件列表
const components = [DateTime]//定义install方法,Vue作为参数
const install = Vue => {//判断是否安装,安装过就不用继续执行if (install.installed) returninstall.installed = true//遍历注册所有组件components.map(component => Vue.component(component.name, component))
}//检测到Vue再执行
if (typeof window !== "undefined" && window.Vue) {install(window.Vue);
}
export default {install,//所有组件,必须具有install方法才能使用Vue.use()...components
}

4、在本地页面中使用组件

在main.js中引入

 在页面中不用引入使用使用组件,因为是全局注册了组件库,所以可以直接使用标签,这个标签与组件文件中的date-time.vue里的name保持一致,只不过一个是驼峰式写法,一个是标签名称。

 

 

 测试可以全局使用组件,说明封装的组件没有问题,下面可以打包了。

5、打包

在package.json文件中的"scripts"字段里添加以下内容:

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

因为在vue-cli中,可以通过以下命令将一个单独的入口打包成库

// target: 默认为构建应用,改为 lib 即可启用构建库模式
// name: 输出文件名
// dest: 输出目录,默认为 dist,这里我们改为 lib
// entry: 入口文件路径
vue-cli-service build --target lib --name lib [entry]

 package.json中配置打包信息:

  • .gitignore文件中添加:
  • 把包的一些测试文件过滤掉,最终打包只留下直接封装的文件,即plugins中封装的暴露组件

 

 在终端执行npm run lib 即可,执行结果:

 

 6、发布包

 7、使用包

npm i xgs_common -s
在项目文件mainjs中引入。

在项目中直接使用组件中的name即可
例如:<date-time/>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复原 IP 地址——力扣93

文章目录 题目描述回溯题目描述 回溯 class Solution{public:static constexpr int seg_count=4<

开源免费用|Apache Doris 2.0 推出跨集群数据复制功能

随着企业业务的发展&#xff0c;系统架构趋于复杂、数据规模不断增大&#xff0c;数据分布存储在不同的地域、数据中心或云平台上的现象越发普遍&#xff0c;如何保证数据的可靠性和在线服务的连续性成为人们关注的重点。在此基础上&#xff0c;跨集群复制&#xff08;Cross-Cl…

【QT调用ST-link-使用QT编写程序-调用ST-LINK_CLI.exe-烧写STM32F4xxx-基础样例】

【QT结合ST-link&#xff0c;使用QT编写程序&#xff0c;调用ST-LINK_CLI.exe,烧写STM32F4xxx-基础样例】 1、前言2、实验环境3、先前了解-自我总结4、实验过程&#xff08;0&#xff09;硬件连接与供电&#xff08;1&#xff09;安装&使用STM32 ST-LINK Utility&#xff0…

合并果子C++详解

题目描述 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0c;…

AOF日志:宕机了,Redis如何避免数据丢失

当服务器宕机后&#xff0c;数据全部丢失&#xff1a;我们很容易想到的一个解决方案是从后端数据库恢复这些数据&#xff0c;但这种方式存在两个问题&#xff1a;一是&#xff0c;需要频繁访问数据库&#xff0c;会给数据库带来巨大的压力&#xff1b;二是&#xff0c;这些数据…

【云原生】K8S超详细概述

目录 一、Kubernets概述1.1 K8S什么1.2为什么要用K8S 二、Kubernetes 集群架构与组件2.1Master组件Kube-apiserverKube-controller-managerKube-scheduler 2.2 配置存储中心etcd 2.3 Node 组件KubeletKube-Proxydocker 或 rocket 三、 Kubernetes 核心概念3.1Pod3.2Pod 控制器K…

React Dva项目 Model中编写与调用异步函数

上文 React Dva项目中模仿网络请求数据方法 中&#xff0c;我们用项目方法模拟了后端请求的数据 那么 今天我们就在models中尝试去使用一下这种异步获取数据的方法 之前 我们在文章 React Dva项目创建Model,并演示数据管理与函数调用 中已经接触过Model了 也可以理解为 它就是 …

STM32入门学习之定时器中断

1.STM32的通用定时器是可编程预分频驱动的16位自动装载计数器。 STM32 的通用定时器可以被用于&#xff1a;测量输入信号的脉冲长度 ( 输入捕获 ) 或者产生输出波 形 ( 输出比较和 PWM) 等。 使用定时器预分频器和 RCC 时钟控制器预分频器&#xff0c;脉冲长度和波形 周…

C# Blazor 学习笔记(7):组件嵌套开发

文章目录 前言相关资料组件嵌套组件模板RenderFragment 意义传统前端样式组件化css 前言 我们在组件化一共有三个目的。 不用写CSS不用写html不用写交互逻辑 简单来说就是Java常说的约定大于配置。我们只需要必须的参数即可&#xff0c;其它的都按照默认配置。我们不需要关系…

穷举深搜暴搜回溯剪枝(3)

一)字母大小写全排列 784. 字母大小写全排列 - 力扣&#xff08;LeetCode&#xff09; 1)从每一个字符开始进行枚举&#xff0c;如果枚举的是一个数字字符&#xff0c;直接忽视 如果是字母的话&#xff0c;进行选择是变还是不变 2)当进行遍历到叶子结点的时候&#xff0c;直接将…

网络安全进阶学习第十一课——MySQL手工注入(2)

文章目录 一、UA注入1、原理2、靶场演示&#xff1a;1&#xff09;一旦页面出现如下现状&#xff0c;就可以使用UA注入2&#xff09;BP抓包3&#xff09;修改User-Agent 二、referer注入1、原理2、靶场演示&#xff1a;1&#xff09;使用BP抓包2&#xff09;修改Referer 三、DN…

0基础学习VR全景平台篇 第76篇:全景相机-圆周率全景相机如何直播推流

圆周率科技&#xff0c;成立于2012年&#xff0c;是中国最早投身嵌入式全景算法研发的团队之一&#xff0c;亦是全球市场占有率最大的全景算法供应商。相继推出一体化智能屏、支持一键高清全景直播的智慧全景相机--Pilot Era和Pilot One&#xff0c;为用户带来实时畅享8K的高清…

【编程】典型题目:寻找数组第K大数(四种方法对比)

【编程】典型题目&#xff1a;寻找数组第K大数&#xff08;四种方法对比&#xff09; 文章目录 【编程】典型题目&#xff1a;寻找数组第K大数&#xff08;四种方法对比&#xff09;1. 题目2. 题解2.1 方法一&#xff1a;全局排序&#xff08;粗暴&#xff09;2.2 方法二&#…

恺英网络宣布:与华为鸿蒙系统展开合作,将开发多款手游

8月5日消息&#xff0c;恺英网络宣布旗下子公司盛和网络参加了华为开发者大会&#xff08;HDC.Together&#xff09;游戏服务论坛&#xff0c;并在华为鸿蒙生态游戏先锋合作启动仪式上进行了亮相。恺英网络表示&#xff0c;将逐步在HarmonyOS上开发多款游戏&#xff0c;利用Har…

Excel修改日期格式,改变日期的筛选方式

我们有两列日期数据&#xff1a; 左边这一列筛选会显示&#xff1a; 右边这一列筛选会显示&#xff1a; 修改格式&#xff0c;将【日期1】改为【日期2】 将【日期1】的格式修改为文本格式即可 修改格式&#xff0c;将【日期2】改为【日期1】 选中日期2&#xff0c;点击【数据…

Spring源码之XML文件中Bean标签的解析1

读取XML文件&#xff0c;创建对象 xml文件里包含Bean的信息&#xff0c;为了避免多次IO&#xff0c;需要一次性读取xml文件中所有bean信息&#xff0c;加入到Spring工厂。 读取配置文件 new ClassPathResource("applicationContext.xml")ClassPathResource是Sprin…

Android 仿京东头部滚动头像动态变化

UI出了一个新需求&#xff0c;仿京东头部滚动&#xff0c;头像需要动态变化&#xff0c;先来看下京东的是什么效果 我们知道什么效果以后&#xff0c;接下来就想想怎么实现吧&#xff0c;Android常规吸顶折叠布局是由CoordinatorLayoutAppBarLayoutCollapsingToolbarLayout组成…

express学习笔记5 - 自定义路由异常处理中间件

修改router/index.js&#xff0c;添加异常处理中间件 *** 自定义路由异常处理中间件* 注意两点&#xff1a;* 第一&#xff0c;方法的参数不能减少* 第二&#xff0c;方法的必须放在路由最后*/ router.use((err, req, res, next) > {console.log(err);const msg (err &…

SpringCloud入门Day01-服务注册与发现、服务通信、负载均衡与算法

SpringCloudNetflix入门 一、应用架构的演变 伴随互联网的发展&#xff0c;使用互联网的人群越来越多&#xff0c;软件应用的体量越来越大和复杂。而传统单体应用 可能不足以支撑大数据量以及发哦并发场景应用的框架也随之进行演变从最开始的单体应用架构到分布式&#xff08…

Python零基础入门(十一)——异常处理

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python入门专栏&#xff1a;《Python入门》欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; 码字不易&#xff0c;如果觉得文章不…