如何将本地组件库上传到npm上

news/2024/9/22 18:10:46/

如何把本地开发的组件发布到npm上面,我们需要去了解vue封装组件的原理,利用vue.use(plugin)这个api, 我们需要把封装好的组件打包成vue库,并提供install方法发布到npm上去,Vue.use(plugin)自动执行插件中的install方法。

我们在这里主要介绍的是怎么把已经开发好的公共组件打包发布到npm上面。首先需要我们调整下目录结构 ----> 创建打包组件的文件 ----> 把打包文件发布到npm

目录结构

  1. 在当前项目创建一个打包文件夹packages
  2. 将每个组件的文件调整下,每个组件下定义src/index (组件内容) 以及与src同级index目录(暴露当前组件)

在这里插入图片描述

javascript">import { App } from 'vue'
import calendar from './src/index.vue'// 让这个组件可以通过use的形式使用
export default {install(app: App) {app.component('jsq-calendar', calendar)}
}
  1. 在文件下packages创建index.js文件
javascript">import { App } from 'vue'
import chooseArea from './chooseArea'
import chooseIcon from './chooseIcon'
import trend from './trend'
......const components = [chooseArea,chooseIcon,trend,......
]
export default {install(app: App) {components.map(item => {app.use(item)})}
}

创建打包命令

  1. 创建build.js用来打包组件
javascript">const path = require('path')
const { defineConfig, build } = require('vite')
const vue = require('@vitejs/plugin-vue')
const vueJsx = require('@vitejs/plugin-vue-jsx')
const fxExtra = require('fs-extra')
const fs = require('fs')// 打包入口文件夹
const entryDir = path.resolve(__dirname, '../packages')
// 出口文件夹
const outDir = path.resolve(__dirname, '../lib')// vite基础配置
const baseConfig = defineConfig({configFile: false,publicDir: false,plugins: [vue(), vueJsx()]
})// rollup配置
const rollupOptions = {external: ['vue', 'vue-router'],output: {globals: {vue: 'Vue'}}
}// 全量打包构建
const buildAll = async () => {await build({...baseConfig,build: {rollupOptions,lib: {entry: path.resolve(entryDir, 'index.ts'),name: 'jsq-element-components',fileName: 'jsq-element-components',formats: ['es', 'umd']},outDir}})
}// 单组件打包构建
// name组件名称
const buildSingle = async (name) => {await build({...baseConfig,build: {rollupOptions,lib: {entry: path.resolve(entryDir, name),name: 'index',fileName: 'index',formats: ['es', 'umd']},outDir: path.resolve(outDir, name)}})
}// 每个组件生产package.json
const createPackageJson = (name) => {const fileStr = `{"name": "${name}","main": "index.umd.js","module": "index.es.js","style": "style.css"}`// 输出fxExtra.outputFile(path.resolve(outDir, `${name}/package.json`),fileStr,'utf-8')
}// 打包成库
const buildLib = async () => {await buildAll()// 获取组件名称组成的数组const components = fs.readdirSync(entryDir).filter(name => {const componentDir = path.resolve(entryDir, name)const isDir = fs.lstatSync(componentDir).isDirectory()return isDir && fs.readdirSync(componentDir).includes('index.ts')})// 循环构建for(const name of components) {await buildSingle(name)createPackageJson(name)}
}
buildLib()
  1. 在package.json创建打包组件命令:“lib”: "node ./build.js”
  2. 执行命令 npm run lib
  3. 在项目文件下会生产lib文件夹,这个就是发布到npm上的文件代码
    在这里插入图片描述
  4. lib文件下执行 npm init -y 生产package.json文件
javascript">{"name": "jsq-element-components", // 组件名称"version": "1.0.0", // 版本号"main": "index.umd.js","module": "index.mjs","types": "index.d.ts","author": {"name": "jsq"},"keywords": ["ts","封装组件","vue-componets"]
}

npm_171">npm官网注册

  1. npm官网
  2. 注册账号
    在这里插入图片描述

npm_175">代码发布到npm

  1. cd 到当前lib文件下
javascript">cd lib 
  1. 先查看 npm 的 registry
javascript">npm config get registry
  1. 设置 npm 的 registry 为官方源
javascript">npm config set registry https://registry.npmjs.org
  1. 执行命令 npm login 登录到 npm
javascript">npm login
  1. 执行命令 npm publish 发布到 npm
javascript">npm publish
  1. 登录npm官网 点击packages 查看上传的代码
    在这里插入图片描述

项目使用

  1. npm install 项目文件名称
javascript">npm install jsq-element-components
  1. 在项目入口文件引入组件
javascript">import App from './App.vue'	
// 组件
import jsqUI from 'jsq-element-components'
// 组件样式
import 'jsq-element-components/style.css'const app = createApp(App)
app.use(jsqUI)

http://www.ppmy.cn/news/1511958.html

相关文章

Android Studio open 一个项目覆盖了当前项目

在新电脑上,想在Android studio 同时打开几个项目,出现了打开新项目会覆盖当前项目的问题, 修复方法如下: File >Settings>System Settings> 按需选择即可,如Ask

【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法

文章目录 ServerSocket构造方法方法 Socket构造方法方法 回显服务器(Echo Server)1. 构造方法2. 建立连接processConnection 方法的创建1. 读取请求并解析2. 根据请求计算响应3. 把响应写回给客户端 3. 完整代码 客户端(Echo Client&#xff…

alibabacloud学习笔记13

微服务Docker镜像打包讲解 父项目怎么springboot版本依赖 每个子模块项目添加依赖 添加构建文件: 微服务Docker镜像打包整合JDK11 服务根目录创建dockerFile文件. dockerFile的内容。 构建镜像( 去到子模块pom文件下): 要下载这个才能使用本地docker.…

uniapp/vue如何实现一个子表单及子表单作用

子表单是一个辅助表单或一个表,它允许在主表单中添加多个行式项目,以处理与主记录相关联的多个辅助项目或数据。子表单在多种应用场景中发挥着重要作用,特别是在需要处理一对多关系的数据时。 以下是对子表单的详细解析: 定义与特…

利用多Lora节省大模型部署成本|得物技术

一、背景 近期,我们在大模型集群的部署过程中遇到了一些挑战。公司有多个业务场景,每个场景都基于自身的数据进行微调,训练出相应的大模型并上线。然而,这些场景的调用量并不高,同时大模型的部署成本较为昂贵&#xf…

Linux网络编程之循环服务器(其一)

文章目录 什么是循环服务器?UDP循环服务器一个简单的UDP循环服务器代码 TCP循环服务器一个简单的TCP循环服务器代码 附录(myhead.h) 本博客参考《Linux C/C服务器开发实践》—— 朱文伟 李建英 什么是循环服务器? 循环服务器在同一个时刻只能…

https握手过程详解

https握手过程详解 上一篇《HTTPS通讯全过程》中https握手过程实际上还有更多的细节,为什么会这样设计呢?是因为一开始将握手过程时,吧步骤说的太详细会导致更难理解惹。所以我就先在上一篇把部分细节忽略,把原来几步的过程先简化…

微服务中的Sidecar模式

微服务中的Sidecar模式 什么是sidecarsidecar如何工作Sidecar 代理服务注册发现Sidecar 代理异构服务发起服务调用异构服务如何被调用 常见应用以MOSN流量接管为例使用 sidecar 模式的优势sidecar和面向切片编程AOP的关系参考 什么是sidecar sidecar是服务网络架构的产物。 S…