构建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 />
相关推荐
玩电脑的辣条哥3 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ew452183 小时前
ElementUI表格表头自定义添加checkbox,点击选中样式不生效
前端·javascript·elementui
suibian52353 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
Moon.93 小时前
el-table的hasChildren不生效?子级没数据还显示箭头号?树形数据无法展开和收缩
前端·vue.js·html
垚垚 Securify 前沿站3 小时前
深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
运维·前端·网络·安全·web安全·系统安全
工业甲酰苯胺6 小时前
Vue3 基础概念与环境搭建
前端·javascript·vue.js
mosquito_lover17 小时前
怎么把pyqt界面做的像web一样漂亮
前端·python·pyqt
柴柴的小记9 小时前
前端vue引入特殊字体不生效
前端·javascript·vue.js
柠檬豆腐脑10 小时前
从前端到全栈:新闻管理系统及多个应用端展示
前端·全栈
bin915310 小时前
DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)
前端·javascript·vue.js·ecmascript·deepseek