自己开发组件更新到npm网站上 通过npm install 安装 保姆级别教程

news2025/4/18 2:57:46

文章目的

在项目开发中,经常通过npm install安装使用各种各样的npn包。本文记录如何自己实现的一个npm包

1. 环境准备

开发环境安装好,没有准备好环境 需要先安装哦

在这里插入图片描述

2. 创建Vue项目

初始化Vue项目:vue create xwdm-test

在这里插入图片描述

选择手动选择功能 Manually select features,选择好了回车下一步

在这里插入图片描述

这里(*)代表选中的, 点一下空格键就可以取消和选中,键盘的上下按钮就可以实现上下切换,根据自己需要自行选择 这里我取消Linter / Fromatter ,选择了CSS Pre-processors ,选择好了回车下一步

在这里插入图片描述

我选择的是vue2版本的

在这里插入图片描述

默认回车,下一步

在这里插入图片描述

选择 In package.json ,回车下一步

在这里插入图片描述

这个是问你要不要把(xwdm-test)创建模板 方便你下次创建项目使用 咱们选择y 回车下一步 然后在下一步等待安装吧

在这里插入图片描述
在这里插入图片描述

这样就是创建成功了

在这里插入图片描述
在这里插入图片描述

项目文件结构如下图

我用的开发工具是WebStorm你们可以用vscode 推荐vscode

在这里插入图片描述

我们执行一下npm install 然后把他运行起来 npm run serve

在这里插入图片描述

在这里插入图片描述

运行起来的效果 看到这个页面 说明我们的项目创建完成

在这里插入图片描述

3. 项目重构

把src文件更改一下名称examples

在这里插入图片描述

把src文件里的assets和components这俩文件删掉, 然后把App.vue 里面的文件修改一下,把没用的处理一下

在这里插入图片描述

main.js 里面的文件修改一下,把没用的处理一下

在这里插入图片描述

main.js 里面的代码如下

import Vue from 'vue'
import App from './App.vue'
const files = require.context('../packages/', false, /\.vue$/);
files.keys().forEach(key => {
  // 组件名
  const name =files(key).default.name
  // 注册组件
  Vue.component(name, files(key).default)
});

Vue.config.productionTip = false

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

创建packages空的文件,packages在根目录下和package.json平级

在这里插入图片描述

在packages空文件里创建index.js文件代码如下

在这里插入图片描述

下面是index.js代码复制一下就可以用

import Vue from "vue";
const files = require.context('./', false, /\.vue$/);
// 定义install方法
const install = function (Vue) {
    files.keys().forEach(key => {
        // 组件名
        const name =files(key).default.name
        // 注册组件
        Vue.component(name, files(key).default)
    });
}
// 判断是否直接引入文件,如果是,就不用调用Vue.use()
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue)
}
export default {
    install
}

在创建xwButton.vue文件这个就是我们自己封装的组件后期通过npm install 就可以引入使用了

在这里插入图片描述

xwButton.vue 文件代码如下,文件名称和name的属性保持一致

<template>
  <div class="test">
    一只敲码的猫~
  </div>
</template>

<script>
// 这里可以导入其他文件(比如:组件,工具 js,第三方插件 js,json 文件,图片文件等等)
export default {
  name: "xwButton",
  // import 引入的组件需要注入到对象中才能使用
  components: {},
  data() {
    // 这里存放数据
    return {
      btn: 0,
    }
  },
  methods: {}
}
</script>

<style scoped>
.test {
  font-size: 50px;
  color: aqua;
}
</style>

App.vue里面引入 xwButton,xwButton属于全局注册的我们就可以直接引入, 引入名称和文件名称保持一致

在这里插入图片描述

修改vue.config.js

在这里插入图片描述
在这里插入图片描述

vue.config.js代码如下

const {defineConfig} = require('@vue/cli-service')
const webpack = require("webpack");
const path = require('path')
module.exports = defineConfig({
    transpileDependencies: true,
    productionSourceMap: false,
    pages: {
        index: {
            // 修改项目入口文件
            entry: 'examples/main.js',
            template: 'public/index.html',
            filename: 'index.html'
        }
    },
    chainWebpack: config => {
        config.module
            .rule('js')
            .include.add(path.resolve(__dirname, 'packages')).end()
            .use('babel')
            .loader('babel-loader')
            .tap(options => {
                return options
            })
    }
})

运行 npm run serve,如果能看到下面的样式, 说明您的项目搭建基本就可以用了

在这里插入图片描述

修改package.json配置
在这里插入图片描述

 "build": "vue-cli-service build --target lib ./packages/index.js --name xwdmUI --dest xwdmUI"
  • –target lib 关键字 指定打包的目录
  • –name 打包后的文件名字
  • –dest 打包后的文件夹的名称

main是入口文件

 "main": "xwdmUI/xwdmUI.umd.js",

执行 npm run build 后项目目录里会多一个文件(xwdmUI)如下图所示:

在这里插入图片描述

4. 代码发布

  1. 注册账户
    先去npm官方网站注册一个账号,注意记住用户名、密码和邮箱,发布的时候可能会用到。

  2. 设置npm源
    可能本地的npm镜像源采用的是淘宝镜像源或者其它的,如果想要发布npm包,我们得吧我们得npm源切换为官方得源,命令如下: npm config set registry=https://registry.npmjs.org

  3. 添加npm用户
    进入已打包好的目录,添加npm用户,执行命令:npm adduser
    这里会让你填写用户名等等,如果之前设置过即可跳过此步。
    在这里插入图片描述

  4. 发布npm
    首先我们要执行打包命令,(xwdomUI是打包文件)
    在这里插入图片描述
    在项目目录下执行命令:npm publish
    如果发布失败可能是名字重复了,改了名字即可,发布成功后,我们即可到npm光网上查看自己发布得npm包:
    在这里插入图片描述

npm官网上我们发布的包

在这里插入图片描述
5. 更新npm包
每个npm包的版本号都是唯一的,我们每次更新npm包后,都是需要更新版本号,否则会报错提醒:
在这里插入图片描述
再执行发布npm publish

在这里插入图片描述

更新后npm仓库里版本也跟着更新了这时说明我我们代码库更新成功了

在这里插入图片描述

总体说来Vue组件封装发布到npm仓库整体难度不大,主要是理解Vue的install方法以及打包相关知识,其实最重要的还是如何封装一个适用范围广,扩展性高的公用组件。

5. 安装使用

进入官网查看我们的代码库,在我们项目中执行npm i xwdm-test(使用方式和elementUI一样的)

在这里插入图片描述

安装成功后package.json文件会多一个我们开发代码库

在这里插入图片描述

在项目里使用方法和elementUI引入方法是一样的

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本次分享结束,欢迎一起讨论指导 哈哈 ^_^

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac shortcut keys cheat sheet【mac 快捷键清单】

文章目录 剪切、拷贝、粘贴和其他常用快捷键访达和系统快捷键 Mac 键盘快捷键 Command&#xff08;或 Cmd&#xff09;⌘ Shift ⇧ Option&#xff08;或 Alt&#xff09;⌥ Control&#xff08;或 Ctrl&#xff09;⌃ Caps Lock ⇪ Fn 剪切、拷贝、粘贴和其他常用快捷…

分享106个图片JS特效,总有一款适合您

分享106个图片JS特效&#xff0c;总有一款适合您 106个图片JS特效下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知识付费甚欢喜&#xff0c…

4、类和对象、this指针、常对象和常函数

类和对象 类的一般形式 访问控制限定符 public 公有成员&#xff0c;谁都可以访问protected 保护成员&#xff0c;只有类自己和子类可以访问private 私有成员&#xff0c;只有类自己可以访问 类和结构的访问控制限定符区别 类的缺省访问控制限定为私有(private)结构的缺省访…

C++空类的那点事儿

什么是C的空类 顾名思义&#xff0c;空类就是指哪些不包含成员变量的类。例如以下这个就是一个空类&#xff1a; class EmptyBase {}; 既然如此&#xff0c;那么是不是说空类的内部一定不会其他代码呢&#xff1f;不是的&#xff0c;空类内部也可以包含其他东西&#xff0c;…

数字化车间|用可视化技术提升车间工作效率

数字化车间正在成为现代制造业的重要组成部分。随着科技的不断进步&#xff0c;传统的车间生产方式逐渐地被数字化和自动化取代。数字化车间将机器和软件进行整合&#xff0c;实现了生产过程的高效、精确和可追溯。在数字化车间中&#xff0c;机器之间可以进行无缝的通信和协作…

【云备份】客户端实现 及 项目整体总结

文章目录 客户端客户端实现思想客户端文件操作类的设计与拷贝Util.hpp的设计data.hpp的设计Storage —— 持久化存储Initload——数据初始化加载 cloud.hpp的设计GetFileIdentifier——创建文件唯一标识Upload—— 文件上传IsNeedupload —— 客户端文件是否需要上传判断RunMod…

正点原子linux应用编程——提高篇5

这篇笔记记一下网络应用编程以及CAN总线的应用编程。 网络基础知识 这个在学习lwIP的时候已经接触过了&#xff0c;这边再过一下&#xff0c;我自己觉得没什么意思的我就跳过了。 网络通信概述 网络通信本质上是一种进程间通信&#xff0c;是位于网络中不同主机上的进程之间…

麒麟linux将图片批量生成PDF的方法

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; wind…

冬天来了,波司登的高端化“春天”不远了?

最近&#xff0c;羽绒服频繁“贵”上热搜。 在众多热搜词条中&#xff0c;一条“国产羽绒服卖到7000元”的话题一度将波司登推上了舆论的风口浪尖。 对此&#xff0c;波司登在最新的业绩说明会上进行了回应&#xff0c;公司表示&#xff1a;“波司登旗下主品牌及子品牌将形成差…

律所信息化建设成为趋势,Alpha系统助力律所数字化升级

近些年来&#xff0c;越来越多的律所借助数字化技术进行信息化建设&#xff0c;围绕“智慧律所”建设做了大量的努力。为尽快完成这一目标&#xff0c;经过深入研判&#xff0c;多数律所决定引进“Alpha法律智能操作系统”。该系统以其强大功能为律所智慧化建设注入催化剂。 据…

2023年AI工具排行榜:最全工具汇总!

如今&#xff0c;人工智能技术正在快速崛起,AI助手、语音识别、机器翻译等工具深深渗透到我们的工作和生活中。这些智能工具极大地提高了我们的工作效率,使我们能更加专注于创造性的任务。 本文将为读者推荐一些实用的AI神器,只要掌握其中一个,就能极大地提升你的工作能力,事半…

使用Python的PyQt实现财务综合计算

背景&#xff1a; 考核内容 使用 Python 编写程序代码&#xff0c;设计一个带交互界面的财务分析软件&#xff0c;并满足以下要求: PART1:《财务软件设计思路报告》 (30分) (1)编写《财务软件设计思路报告》&#xff0c;描述你编制这个财务软件的设计目标、应用场景、设计思路…

Mysql进阶-事务锁

前置知识-事务 事务简介 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 就比如: 张三给李四转账1000块钱&#xff0…

基于AT89C51单片机四位加法计算器的设计

1&#xff0e;设计任务 利用AT89C51单片机为核心控制元件,设计一个四位加法计算器&#xff0c;设计的系统实用性强、操作简单&#xff0c;实现了智能化、数字化。 1&#xff09;、通过4*4矩阵键盘输入数字及运算符&#xff1b; 2&#xff09;、可以进行4位十进制数以内的加法…

线程池(Linux +C)

参考 手写线程池 - C语言版 | 爱编程的大丙 (subingwen.cn) 目录 1.为什么需要线程池&#xff1f; 1&#xff09;线程问题&#xff1a; 2&#xff09;如何解决线程问题&#xff08;线程池的优势&#xff09;&#xff1a; 2.线程池是什么&#xff1f; 1&#xff09;线程的…

某夕夕商家告诉你:这样寄快递居然这么省钱(便宜寄全国)

在当下很多时候寄快递成为了困扰很多人的问题&#xff0c;比如很多时候都会面临运费贵的问题&#xff0c;而且寄快递的效率也得不到保障&#xff0c;即使投诉快递员最终也是无济于事。其实在目前来看寄快递并没有这么难&#xff0c;闪侠惠递就能够有效的寄快递&#xff0c;而且…

试验数字化平台WDP 助力车企数据管理加速度

一 现状 随着现代测控技术的提高&#xff0c;数据结构变得越来越复杂多样&#xff0c;数据量也在日益增大。又因试验条件的限制&#xff0c;大多数企业的数据管理方式主要是通过各类电子文档将试验数据保存在每个工程师的移动电脑中&#xff0c;再进行汇总存储和共享。这种落后…

OpenHarmony 设备启动Logo和启动视频替换指南

前言 OpenHarmony源码版本&#xff1a;4.0release 开发板&#xff1a;DAYU / rk3568 一、Logo替换 替换其中的logo.bmp 和 logo_kernel.bmp文件 注意事项&#xff1a; 1、图片的分辨率需要和设备匹配 2、如果是非首次编译&#xff08;存在缓存&#xff09;需要将out目录删…

【Backbone】TransNeXt:最新ViT模型(原理+常用神经网络汇总)

文章目录 一、近几年神经网络 Backbone 回顾1.Densenet 与 Resnet2.CBP3.SENet4.GCNet5.DANet6.PANet 与 FPN7.ASPP8.SPP-net9.PSP-net10.ECA-Net 二、TransNeXt&#xff08;2023&#xff09;1.提出问题2.Aggregated Pixel-focused Attention2.1 Pixel-focused Attention&#…

如何一个月内发表一篇中文核心 干货分享

发论文经验教学 干货分享&#xff1a;如何在一个月内发表一篇中文核心 经验分享 干货分享_哔哩哔哩_bilibili