vue3+ts+vite自定义组件上传npm流程

1. 创建项目

npm create vite 

这里踩坑点:

运行vite生成的vue项目时报错“SyntaxError: Unexpected token '??=' at “ 是因为node版本过低

电脑为windows11系统,我当时使用的版本node版本是14.21.3,如下图,后边安装了nvm版本管理,现在使用的node版本为16.20.1,运行项目正常

2.写组件

这里为个人组件内容

breadcrumb/index.ts

import type {App} from 'vue'
import Breadcrumb from './Breadcrumb.vue';
Breadcrumb.install=(app:App)=>{app.component(Breadcrumb.__name as string,Breadcrumb);
}
export default Breadcrumb;

index.ts

import type {App} from 'vue'
import Breadcrumb from './breadcrumb'const components=[Breadcrumb
];const install=(app:App):void=>{components.forEach(component=> app.component(component.__name as string,component))
}
export {Breadcrumb
}const viteVueNode={install};
export default viteVueNode

3.vite.config.ts配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import {resolve} from 'path';
export default defineConfig({plugins: [vue()],css:{preprocessorOptions:{less:{}}},build:{lib:{entry:resolve(__dirname,'packages/index.ts'),name:'ViteVueNode',fileName:'vite-vue-node',},rollupOptions:{external:['vue'],output:{format:'umd',exports:'named',globals:{vue:'Vue'},},},minify:'terser',terserOptions: {compress: {drop_console: true, // 生产环境下去除consoledrop_debugger: true, // 生产环境下去除debugger}}},
})

4.package.json配置

{"name": "vite-project","private": true,"version": "0.0.0","type": "module","files": ["dist"],"scripts": {"dev": "vite","build": "npm run build-only  && vue-tsc --emitDeclarationOnly && npm run config && npm run publish ","config": "node ./config/index.ts","build-only": "vite build","types": "vue-tsc ","preview": "vite preview","publish":"cd dist && npm publish"},"dependencies": {"vue": "^3.3.11"},"devDependencies": {"@types/node": "^20.10.5","@vitejs/plugin-vue": "^4.5.2","less": "^4.2.0","npm-run-all": "^4.1.5","terser": "^5.26.0","typescript": "^5.2.2","vite": "^5.0.8","vue-tsc": "^1.8.25"}
}

5.tsconfig.json中配置

{"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"module": "ESNext","lib": ["ES2020", "DOM", "DOM.Iterable"],"skipLibCheck": true,/* Bundler mode */"moduleResolution": "bundler","allowImportingTsExtensions": false,"resolveJsonModule": true,"isolatedModules": true,"noEmit": false,"jsx": "preserve",/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"noFallthroughCasesInSwitch": true,"declaration": true,"outDir": "dist",// "outFile":"dist/vite-vue-node.d.ts"  整合到一个声明文件中},"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue","packages/*.ts"],"references": [{ "path": "./tsconfig.node.json" }],"exclude": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue","packages/**/*.vue"],
}

6.config文件内容

config文件是为了在dist中添加readme.md和package.json

config/index.ts文件

const fs=require("fs");
const path=require("path")
function mkPackageJson(){var templatePath = path.resolve(__dirname, './package.json');var needPath=path.resolve(__dirname, '../dist/package.json');var isExistCopyFile=fs.existsSync(needPath);if(!isExistCopyFile){fs.copyFileSync(templatePath,needPath);}
}
function mkReadMe(){var templatePath = path.resolve(__dirname, './README.md');var needPath=path.resolve(__dirname, '../dist/README.md');var isExistCopyFile=fs.existsSync(needPath);if(!isExistCopyFile){fs.copyFileSync(templatePath,needPath);}
}
mkPackageJson();
mkReadMe();

最后 运行 npm run build 执行构建

npm run build  中做的主要是vite构建、tsc自动生成声明文件、npm publish上传包(前提你有npm账号并且npm login)

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

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

相关文章

CEC2017(Python):五种算法(PSO、RFO、SSA、DE、HHO)求解CEC2017

一、5种算法简介 1、粒子群优化算法PSO 2、红狐优化算法RFO 3、麻雀搜索算法SSA 4、差分进化算法DE 5、哈里斯鹰优化算法HHO 二、CEC2017简介 参考文献: [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem de…

为什么引入偏向锁、轻量级锁,介绍下升级流程 Synchronized 引入了锁升级的机制之后,如果有线程去竞争锁:

文章目录 为什么引入偏向锁、轻量级锁,介绍下升级流程Synchronized 引入了锁升级的机制之后,如果有线程去竞争锁: 今天我们来谈谈一个有意思的问题,开始。。。。 为什么引入偏向锁、轻量级锁,介绍下升级流程 Synchroni…

远程网络唤醒家庭主机(openwrt设置)

远程网络唤醒家庭主机(openwrt设置) 前提: 1.配置好主板bios的网络唤醒功能(网络教程自己百度一下找) 2.电脑开启网络唤醒功能(网络教程自己百度一下找) 3.路由器通过ddns实现域名和动态IP绑定内网穿透方法汇总_不修改光猫进行内网穿透-C…

云短信平台优惠活动 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 某云短信厂商,为庆祝国庆,推出充值优惠活动。 现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。 输入描述 第一行客户预算M,其中 0<=M<=100 第二行给出售价表,P1,P2,… Pn, 其中 1<=n<=100…

Windows各版本如何看到文件扩展名,这个帖子很全

前言 前段时间更新的文章中有提到文件扩展名这个词&#xff0c;估计很多小伙伴看着都萌萌哒。 你在办公室复制的“安装包”到家里的电脑&#xff0c;却打不开的原因都在这&#xff01; 新安装的电脑基本上都是默认关闭文件扩展名的&#xff0c;所以文件都会显示成下面这个样…

2023-12-29 服务器开发-Centos部署LNMP环境

摘要: 2023-12-29 服务器开发-Centos部署LNMP环境 centos7.2搭建LNMP具体步骤 1.配置防火墙 CentOS 7.0以上的系统默认使用的是firewall作为防火墙&#xff0c; 关闭firewall&#xff1a; systemctl stop firewalld.service #停止firewall systemctl disable fire…

[Angular] 笔记 19:路由参数

油管视频 Route Parameters 路由参数是跟在 url 后面的数字&#xff0c;字符串&#xff0c;或者 数字字符串&#xff0c;例如如下 url 中的 123&#xff0c;此类参数会传给后端&#xff1a; www.facebook.com/profile/123 首先将 pokemon-template-form 组件移到 pokeman-ba…

[Angular] 笔记 16:模板驱动表单 - 选择框与选项

油管视频&#xff1a; Select & Option (Template Driven Forms) Select & Option 在 pokemon.ts 中新增 interface: export interface Pokemon {id: number;name: string;type: string;isCool: boolean;isStylish: boolean;acceptTerms: boolean; }// new interface…

GLTF 编辑器实现逼真3D动物毛发效果

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 要实现逼真的3D动物毛发效果&#xff0c;可以采用以下技术和方法&…

RO-NeRF论文笔记

RO-NeRF论文笔记 文章目录 RO-NeRF论文笔记论文概述Abstract1 Introduction2 Related Work3 Method3.1 RGB and depth inpainting network3.2 Background on NeRFs3.3 Confidence-based view selection3.4 Implementation details 4 Experiments4.1 DatasetsReal ObjectsSynthe…

从方程到预测:数学在深度学习中的作用

图片来源 一、说明 深度学习通常被认为是人工智能的巅峰之作&#xff0c;它的成功很大程度上归功于数学&#xff0c;尤其是线性代数和微积分。本文将探讨深度学习与数学之间的深刻联系&#xff0c;阐明为什么数学概念是该领域的核心。 二、数学框架 从本质上讲&#xff0c;深度…

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞

目录 非强制路由RCE漏洞 web579 web604 web605 web606 web607-610 前面审了一些tp3的sql注入,终于到tp5了&#xff0c;要说tp5那最经典的还得是rce 下面介绍非强制路由RCE漏洞 非强制路由RCE漏洞原理 非强制路由相当于开了一个大口子&#xff0c;可以任意调用当前框…