创建组件库

82 阅读1分钟

创建组件库

npm create vant-cli-app
mkdir component && cd component
yarn create @umijs/dumi-lib --site

1、创建项目

npm init vite@latest // 创建项目

2、安装依赖

scss对应依赖
npm install sass sass-loader --save-dev
修改配置 vite.config.ts
import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'

import { resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(), vueJsx(), vueDevTools()],
  resolve: {
    alias: {
      // '@': fileURLToPath(new URL('./src', import.meta.url))
      // '@': fileURLToPath(new URL('./packages', import.meta.url))
      // '@': fileURLToPath(new URL('./packages', import.meta.url))

      '@': resolve(__dirname, 'packages')
    },
    // 类型: string[] 导入时想要省略的扩展名列表。
    extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.mjs']
  },
  build: {
    outDir: 'lib',
    lib: {
      entry: fileURLToPath(new URL('./packages/index.ts', import.meta.url)),
      name: 'i-ui-plus',
      // fileName: (format) => `index.${format}.js`
      fileName: 'i-ui-plus'
    },
    rollupOptions: {
      // 确保外部化依赖模块
      // 请确保外部化那些你的库中不需要的依赖
      external: ['vue', 'ElementPlus'],
      output: {
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: 'Vue',
          ElementPlus: 'ElementPlus'
        }
      }
    }
  }
})

修改package.json默认地址,修改对应字段
{
  "private": false,
  "type": "module",
  "main": "lib/i-ui-plus.js",
  "module": "lib/i-ui-plus.js",
  "types": "lib/index.d.ts",
  "files": [
    "lib",
    "package.json"
  ],
}

3、打包 发布

npm run build // 打包到lib文件

4、本地建立连接

cd component // 组件项目
npm link // 添加软连接

// 删除软连接
npm uninstall -g <packageName> // package.json name属性

// 查看本地包
npm ls --global

5、项目中使用软连接

npm link <packgeName> // 组件项目 package.json name属性
npm unlink <packageName> //取消软连接,package.json 中依赖也将去掉,应重新安装当前依赖才可正常使用依赖对应的组件模块等

项目中使用 main.ts

// 引入组件库
// import IUi from 'i-ui/lib/i-ui-plus' ; 不修改package.json文件对应main module字段使用
import IUi from 'i-ui' 

import 'i-ui/lib/style.css' // 引入样式

app.use(IUi)

6、项目从git 仓库安装依赖

npm install it+http://user@hostname/project/blah.git#commit-ish
// commit-ish 是可以被git checkout的任何tag、sha或者branch。默认为master