使用vue3、vite打包项目中组件库中的某一个组件,并将其推送至npm上

最近公司人手不够,老板将一个项目交给外包团队进行协助开发,老板又不希望外包团队可以看某些业务上的组件代码,让我解决这个问题;查找了一下解决方案,可以将组件类似于项目打包一样,将其打包成一个依赖组件,可以npm install 去下载,并且组件打包后,.vue文件会被打包成js文件,想要阅读起来也非常困难。

大致的组件目录如下

一、创建组件目录

我创建了一个私有组件库目录privateComponent,这个组件用于存放要打包的组件。

二、组件配置

我要打包的组件是HMap组件,那么我在HMap组件下创建index.ts文件,编写挂载方法并抛出

// index.ts
import type { App } from 'vue'
import MyMap from "./index.vue"

// 使用install方法,在app.use挂载
MyMap.install = (app: App) => {
    app.component(MyMap.__name as string, MyMap) //注册组件
}

export default MyMap

三、组件主入口

在privateComponent下创建index.ts文件作为主入口文件,并且将需要打包的组件在其中注册,这里我将HMap进行了引入。

// index.ts
import type { App } from 'vue'
import MyMap from './HMap'

// 所有组件列表
const components = [
    MyMap,
]

// 定义 install 方法
const install = (app: App): void => {
    // 遍历注册所有组件
    components.forEach(component => app.component(component.__name as string, component))
}

export {
    MyMap,
}

const HComponents = {
    install
}

export default HComponents

四、vite.config.ts文件配置。

在privateComponent目录里下创建一个vite.config.ts文件,编写对应的打包配置,

//vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path';
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

const pathResolve = (dir: string) => {
    return resolve(__dirname, '.', dir);
};
const alias: Record<string, string> = {
    '@': pathResolve('./src'),
};

export default defineConfig({
    base:'./',
    build:{
        outDir: 'my-map/dist', //输出文件名称
        lib:{
            entry: resolve(__dirname, './index.ts'), //指定组件编译入口文件
            name: 'MyMap',
            fileName: 'my-map'
        },//库编译模式配置
        rollupOptions: {
            external: ['vue','zrender','pinia'],
            output: {
                exports: 'named',
                globals: {
                    vue:'Vue',
                    zrender:'zrender',
                    pinia:'pinia'
                }
            }
        },
        minify: 'terser',
        terserOptions: { // 在打包代码时移除 console、debugger 和 注释
            compress: {
                drop_console: true, // 生产环境时移除console
                drop_debugger: true // 生产环境时移除debugger
            },
            format: {
                comments: false // 删除注释comments
            }
        }
    },
    plugins: [
        vue(),
        AutoImport({
            resolvers: [ElementPlusResolver()],
        }),
        Components({
            resolvers: [ElementPlusResolver()],
        }),
    ],
    resolve: {
        alias,
    }
})


五、package文件配置。

在privateComponent目录里下创建package.json文件,只需要写一个build脚本即可。

六、打包。

以上步骤都完成后,进入到privateComponent目录下,执行npm run build

打包命令执行完成后,就可以看到privateComponent目录下生成了一个名为my-map的文件,这就是打包后的组件。

测试组件是否能够正常使用,在需要使用这个组件的页面通过dist包下的my-map.js文件引入组件,记得还要将样式文件在main中引入;在组件引入后,发现可以正常使用,页面也可以正常显示,说明我们打包后的组件可以正常使用。

到这一步就可以解决老板的需求了,我可以在git的.gitignore文件中配置,忽略HMap组件不上传这个文件,只上传我打包后的组件就可以了。

七、上传至npm

如果你的组件可以开放给所有人用,那么你还可以将你的组件上传至npm上,其他人可以通过npm install去下载;进入你的组件目录,执行npm init -y,生成了一个package文件。

修改package文件main主入口地址,指向你的组件入口地址。

然后执行以下命令,根据提示登录后推送即可,然后就可以打开npm管网搜索你的组件了。

npm login

npm publish

注:npm login 大概率登录会超时,需要设置代理才能进行登录,在后面拼上你的ip代理地址即可。

查看你的代理ip地址,按照以下设置后,就能够登录成功,推送的你组件到npm上了

npm config get proxy http://你的代理ip和端口
 
npm config get https-proxy http://你的代理ip和端口

推送完成后记得删除代理,否则会影响你后续使用npm install时会导致下载超时失败。

//删除代理
npm config delete proxy
npm config delete https-proxy

### Vue3 组件打包发布到 NPM 的教程 #### 准备工作 为了将 Vue3 组件打包发布至 NPM,需先安装 Node.js 和 npm。确保本地环境已配置好 Git 账户以及拥有 NPM 用户账号。 #### 创建项目结构 创建一个新的文件夹作为项目的根目录,在该目录下初始化一个项目: ```bash mkdir vue-component && cd $_ npm init -y ``` 这一步骤会生成 `package.json` 文件用于管理依赖项和脚本命令[^1]。 #### 安装必要的开发工具 接下来安装构建所需的工具链,包括 Webpack 或 Vite 来处理模块化资源编译;TypeScript (如果适用),以及其他辅助库如 Babel 等来支持更广泛的浏览器兼容性和语法特性: ```bash npm install --save-dev vite typescript @vitejs/plugin-vue ``` 对于 TypeScript 支持还需要额外设置 tsconfig.json 配置文件以定义编译选项。 #### 编写组件代码 在 src 目录内编写自定义的 Vue 单文件组件(SFCs), 通过 `<script setup>` 语法糖简化模板逻辑表达: ```html <!-- MyComponent.vue --> <template> <div class="my-component"> Hello from {{ name }}! </div> </template> <script lang="ts" setup> import { ref } from &#39;vue&#39; const props = defineProps<{ msg?: string; }>(); const name = ref(props.msg || "World"); </script> <style scoped> .my-component { color: blue; } </style> ``` 此示例展示了如何利用组合 API 构建响应式的 UI 控件。 #### 设置 Rollup/Vite 进行优化与压缩 为了让其他开发者能够轻松引入这个组件库而无需关心内部实现细节, 可以借助于 rollup-plugin-typescript2 插件完成 ES Module 输出格式转换及 Tree Shaking 功能去除未使用的部分从而减小程序体积大小. 如果是基于 Vite,则可以直接使用其内置功能来进行生产模式下的打包操作: ```json // package.json scripts section { ... "build": "vite build" } ``` 执行上述命令将会依据默认配置自动产出 dist/ 下面的目标产物. #### 注册登录 NPM 首次发布之前要注册成为 NPM 用户,按照提示输入用户名、密码等相关信息完成账户验证过程。之后可以通过如下指令登陆: ```bash npm login ``` #### 发布流程 最后一步就是实际推送源码包给官方仓库啦!只需要简单运行下面这条语句即可达成目的: ```bash npm publish ``` 一旦成功提交后就能看到类似这样的反馈消息:“+ [email protected]”,表示已经正式上线可供他人下载试用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿琰a_

感谢您的打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值