美文网首页技术随笔
2022-05-24 随笔 使用vite构建一个npm包

2022-05-24 随笔 使用vite构建一个npm包

作者: narcissus灬 | 来源:发表于2022-05-24 18:18 被阅读0次

构建npm包

使用vite创建一个vue项目

npm create vite
# Project name: test-btn
# Select a framework: vue
# Select a variant: vue
cd vue
npm i

在 components 目录下创建一个 TestBtn.vue 组件

<template>
  <button>我是测试要发布的按钮组件</button>
</template>

<script>
export default {
  name: 'test-btn'
}
</script> 

在 src 目录下创建一个 index.js

//index.js
import TestBtn from "./components/TestBtn.vue"; // 引入封装好的组件

export { TestBtn } //实现按需引入*


const components = [TestBtn];
const install = function(App, options) {
    components.forEach((component) => {
        App.component(component.name,component);
    });
};
export default { install } // 批量的引入*

修改 vitee.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

export default defineConfig({
  plugins: [vue()],
  build: {
    lib: {
      entry: path.resolve(__dirname, 'src/index.js'),
      name: 'TestBtn',
      fileName: (format) => `test-btn.${format}.js`
    },
    rollupOptions: {
      // 确保外部化处理那些你不想打包进库的依赖
      external: ['vue'],
      output: {
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: 'Vue'
        }
      }
    }
  }
})

修改 package.json

{
  "name": "test-btn-ui",
  "version": "0.0.1",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "serve": "vite preview"
  },
  "files": [
    "dist"
  ],
  "main": "./dist/test-btn.umd.js",
  "module": "./dist/test-btn.es.js",
  "exports": {
    ".": {
      "import": "./dist/test-btn.es.js",
      "require": "./dist/test-btn.umd.js"
    }
  },
  "dependencies": {
    "vue": "^3.2.25"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^2.3.3",
    "vite": "^2.9.9"
  }
}

打包

使用 npm run build 生成 dist 文件(注意修改 .gitignore 文件,需要提交 dist 文件),提交到 githubgitee

使用构建的包

在 package.json 中添加依赖

package.json 中的 devDependencies 下添加 "test-btn": "git+https://gitee.com/narcissus209/test-btn.git"

  ...
  "devDependencies": {
    "test-btn": "git+https://gitee.com/narcissus209/test-btn.git",
    ...
  }

在 App.vue 中局部引入

<template>
  <!-- 如果是全局引入需要使用中线连接,如果是局部引入可以使用驼峰命名 -->
  <test-btn />
</template>

<script setup>
import { TestBtn } from 'test-btn'
</script>

在 main.js 中全局引入

import { createApp } from 'vue'
import App from './App.vue'
import TestBtn from 'test-btn'

const app = createApp(App)
app.use(TestBtn)

app.mount('#app')

相关文章

网友评论

    本文标题:2022-05-24 随笔 使用vite构建一个npm包

    本文链接:https://www.haomeiwen.com/subject/ugtsprtx.html