vite+vue3打包成一个js文件及使用方法

前言

在公司中有很多插件,以前是通过webpack打包的,打包成一个js文件,然后通过cdn方式引用。今天就来介绍下使用vite如何将一个项目打包成一个js文件。

打包准备

在准备好需要打包的组件后,在main.js中引入改根组件,然后再导出改组件,如下:

js 复制代码
// main.js

import helloword from './components/helloword.vue'

export default helloword

打包配置:

使用了 cssInjectedByJsPlugin插件将css打包进js中,引入的外部css文件需要在组件中import进来

js 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";

export default defineConfig({
  plugins: [vue(),cssInjectedByJsPlugin()], // 将 .css 和 .scss 文件打包进 JavaScript
  // 打包配置
  build: {
    lib: {
      entry: resolve(__dirname, './src/main.js'), // 设置入口文件【这里也可以直接引用插件.vue根组件】
      name: 'helloword', // 起个名字,安装、引入用
      fileName: (format) => `helloword.${format}.js`, // 打包后的文件名【可以自定义】
      formats:['umd']
    },
    sourcemap: false, // 输出.map文件
    rollupOptions: {
      // 确保外部化处理那些你不想打包进库的依赖
      external: ['vue'],
      output: {
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: 'Vue',
          helloword: 'helloword'   // 这里暴露出去一个全局变量
        }
      }
    }
  }
})

使用方式:

引入vue.js和打包后的js文件

js 复制代码
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <script src="./dist/helloword.umd.js"></script>

组件使用

js 复制代码
<body>
 <div id="app">
   <helloword myValue="131232313" @btnClick="alert(13123213)" ></helloword> 
 </div>
 <script>
   Vue.createApp({ components: { 'helloword': helloword } }).mount('#app')
 </script>
</body>

渲染函数使用

js 复制代码
<body>
 <div id="app">
 </div>
 <script>
   // 创建一个 Vue 3 应用
   const app = Vue.createApp({
     // 在这里定义应用的选项
     render() {
       return Vue.h(helloword, {
         myValue: 'rearaseraserasr',
         onBtnClick: (value)=>{
           alert(value)
         }
         // 在这里可以传递任何 props 给组件
         // 例如: foo: 'bar'
       });
     }
   });
   // 挂载应用到指定dom
   app.mount('#app');
 </script>
</body>

这样就实现了vite打包成一个js文件啦。

相关推荐
一 乐1 小时前
餐厅管理智能点餐系统|基于java+ Springboot的餐厅管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
北极糊的狐1 小时前
父组件向子组件传参时,传递数组和对象类型的参数的方法
前端·javascript·vue.js
爱泡脚的鸡腿3 小时前
uni-app D6 实战(小兔鲜)
前端·vue.js
北极糊的狐3 小时前
Vue3 中父子组件传参是组件通信的核心场景,需遵循「父传子靠 Props,子传父靠自定义事件」的原则,以下是资料总结
前端·javascript·vue.js
看到我请叫我铁锤3 小时前
vue3中THINGJS初始化步骤
前端·javascript·vue.js·3d
谢尔登4 小时前
defineProperty如何弥补数组响应式不足的缺陷
前端·javascript·vue.js
涔溪5 小时前
实现将 Vue2 子应用通过无界(Wujie)微前端框架接入到 Vue3 主应用中(即 Vue3 主应用集成 Vue2 子应用)
vue.js·微前端·wujie
T***u3336 小时前
前端框架在性能优化中的实践
javascript·vue.js·前端框架
jingling5557 小时前
vue | 在 Vue 3 项目中集成高德地图(AMap)
前端·javascript·vue.js
油丶酸萝卜别吃7 小时前
Vue3 中如何在 setup 语法糖下,通过 Layer 弹窗组件弹出自定义 Vue 组件?
前端·vue.js·arcgis