构建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 />
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学2 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端