构建npm组件包并打包上传到npm官网

vite+js+v3简略搭建(笔记用)

原作者:https://juejin.cn/post/7119827361092108301?searchId=20240724094258A72138D981DC0419C33E

js 复制代码
1.npm create vite@latest # 使用npm安装vite脚手架

2.先install项目,然后改造:
	修改:./src -> ./examples
	新增:./packages(该文件夹用于存放开发的组件)
	找到项目根目录下的index.html文件,将里面的script标签的src属性内容由/src/main.js替换为/examples/main.js,即可重新访问本地
	
3.编写组件,这里我啥也不写,就一个页面塞点简单内容,当作一个小组件
	组件位置packages\TaskName\src\task.vue
	内容:
	<script setup name="task">
	import { ref } from 'vue'
	const msg = ref('Vite + Vue3')
	
	const count = ref(0)
	</script>
	
	<template>
	  <h1>{{ msg }}</h1>
	</template>
	
	<style scoped>
	.read-the-docs {
	  color: #888;
	}
	</style>
	添加packages\TaskName\index.js文件用于导出该组件:
	import TaskName from './src/task.vue';
	
	TaskName.install = (App) => {
		App.component(TaskName.__name, TaskName);
	};
	
	export default StarrySky;
	添加packages\index.js文件,用于导出所有的组件
	import TaskName from './TaskName';

	//按需引入
	export { TaskName};
	const components = [TaskName];
	const install = (App) => {
		components.forEach((item) => {
			App.component(item.__name, item);
		});
	};
	export default {
		install,
	};
	
4.vite.config.js文件修改
	输出内容到lib文件夹,打包入口文件设置为./packages/index.js文件
	import { defineConfig } from 'vite';
	import vue from '@vitejs/plugin-vue';
	import { resolve } from 'path';
	
	export default defineConfig({
		plugins: [vue()],
		build: {
			outDir: 'lib',
			lib: {
				entry: resolve(__dirname, 'packages/index.js'), //指定组件编译入口文件
				name: 'Vue3ViteDemo',
				fileName: 'vue3-vite-demo',
			},//库编译模式配置
			rollupOptions: {
				// 确保外部化处理那些你不想打包进库的依赖
				external: ['vue'],
				output: {
					// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
					globals: {
						vue: 'Vue',
					},
				},
			},// rollup打包配置
		},
	});
	
5.执行npm run build ,会生成lib文件夹,里面包含了UMD、ESM规范打包的几个js库文件,还有css样式文件,整个组件库文件最终都会输出在lib文件夹下

6.修改package.json配置
	{
	  "name": "vue3-vite-demo",//名字
	  "private": false,   //这个要改掉的,设为私有不能上传的
	  "version": "0.0.1", //版本号。每次更新都得修改
	  "type": "module",
	  "keywords": [
	    "vite-demo" //npm上搜索的关键字
	  ],
	  "scripts": {
	    "dev": "vite",
	    "build": "vite build",
	    "preview": "vite preview"
	  },
	  "files": [
	    "lib"
	  ],
	  "main": "lib/vue3-vite-demo.umd.js",//包函数入口文件
	  "module": "lib/vue3-vite-demo.es.js",//ESM标准入口
	  "exports": {
	    "./lib/style.css": "./lib/style.css",//css文件需要暴露否则样式引入会报错
	    ".": {
	      "import": "./lib/vue3-vite-demo.js",
	      "require": "./lib/vue3-vite-demo.umd.js"
	    }
	  },
	  "dependencies": {
	    "vue": "^3.4.31"
	  },
	  "devDependencies": {
	    "@vitejs/plugin-vue": "^5.0.5",
	    "vite": "^5.3.4",
	  }
	}
	
7.设置忽略文件 根目录添加 .npmignore文件
	.DS_Store
	node_modules
	/dist
	
	# 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*
	
	# 以下是新增的
	# 要忽略目录和指定文件
	.vscode
	examples/
	packages/
	public/
	vite.config.js
	*.map
	*.html
8.npm login 登录 登录前需要切一下官方的源 npm config set registry https://registry.npmjs.org  有时候可能要科学上网,不行就只能构建私有库了

9.npm publish 推送

10.使用
	npm install  vue3-vite-demo @latest -D
	mian.js中添加全局引用
	//main.ts or main.js
	import { createApp } from 'vue'
	import Vue3ViteDemo from 'vue3-vite-demo';
	import 'vue3-vite-demo/lib/style.css';
	import './style.css'
	import App from './App.vue'
	
	const app = createApp(App);
	
	app.use(Vue3ViteDemo);
	app.mount('#app');


	组件中使用就是
	<task />
相关推荐
Amumu1213815 分钟前
Vue组件化编程
前端·javascript·vue.js
We་ct24 分钟前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
小二·1 小时前
Python Web 开发进阶实战(终章):从单体应用到 AI 原生生态 —— 45 篇技术演进全景与未来开发者生存指南
前端·人工智能·python
m0_637256582 小时前
vue-baidu-map添加了类型组件导致非常卡顿的问题
前端·javascript·vue.js
挂机且五杀2 小时前
为什么在React地图组件里,memo 不是优化,而是生存?
前端·react.js·前端框架
RFCEO2 小时前
HTML编程 课程七、:HTML5 新增表单标签与属性
前端·html·html5·搜索框·手机号·邮箱验证·日期选择
刘一说2 小时前
Vue开发中的“v-model陷阱”:为什么它不能用于非表单元素?
前端·javascript·vue.js
利刃大大2 小时前
【Vue】组件生命周期 && 组件生命周期钩子
前端·javascript·vue.js·前端框架
建群新人小猿4 小时前
陀螺匠企业助手—个人简历
android·大数据·开发语言·前端·数据库
CHU7290354 小时前
在线教学课堂APP前端功能:搭建高效线上教学生态
前端·人工智能·小程序·php