vite 创建Vue3自定义指令集合插件,并发布npm

  1. 创建项目

    javascript 复制代码
    npm create create-vite@latest
  2. 项目目录结构

    1. 将没必要的都删点,不删除也行;创建对应的目录结构 在src 下创建 packages 目录,再创建 directives 文件夹 用来存放对应的指令js代码,同级创建一个 index.js 文件。用来统一引入管理的需要注册的指令

    2. index.js 代码是这样的

      javascript 复制代码
      import date from "./directives/date"; // 时间处理
      import move from "./directives/move"; // 移动处理
      import resize from "./directives/resize";
      
      const directiveList = [move, date, resize];
      
      const install = (App) => {
        // 批量注册自定义指令
        directiveList.forEach((item) => {
          item(App);
        });
      };
      export default { install };
    3. 然后 main.js 还得执行install 方法,然后就成功全局注册封装好的自定义指令了,接下来就是封装,打包,上传,下载验证

      javascript 复制代码
      import { createApp } from "vue";
      import App from "./App.vue";
      
      import install from "./packages/index";
      
      const app = createApp(App);
      
      install.install(app);
      
      app.mount("#app");
    4. vite.config.js 也需要改一下配置

      javascript 复制代码
      import { defineConfig } from "vite";
      import vue from "@vitejs/plugin-vue";
      import path from "path";
      
      export default ({ mode }) => {
        return defineConfig({
          plugins: [vue()],
          // 运行服务配置
          server: {
            host: "0.0.0.0",
            port: 8889,
            open: true,
          },
          //这里进行配置别名
          resolve: {
            alias: {
              "@": path.resolve("./src"), // @代替src
            },
          },
          // 打包配置
          build: {
            outDir: "dist",
            // 兼容
            target: "es2015",
            sourcemap: false,
            lib: {
              entry: path.resolve(__dirname, "src/packages/index.js"), // 打包入口
              name: "custom-directives", // 打包后的名称
              fileName: (format) => `custom-directives.${format}.js`,
            },
            rollupOptions: {
              // 确保外部化处理那些你不想打包进库的依赖
              external: ["vue"],
              output: {
                // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
                globals: {
                  vue: "Vue",
                },
              },
            },
          },
        });
      };
    5. 在修改 package.json 文件配置

      javascript 复制代码
      {
        "name": "custom-directives",
        "private": true,
        "version": "0.0.0",
        "type": "module",
        "scripts": {
          "dev": "vite",
          "build": "vite build",
          "preview": "vite preview"
        },
        "files": [
          "dist"
        ],
        "main": "./dist/custom-directives.umd.js",
        "module": "./dist/custom-directives.es.js",
        "exports": {
          ".": {
            "import": "./dist/custom-directives.es.js",
            "require": "./dist/custom-directives.umd.js"
          }
        },
        "dependencies": {
          "dayjs": "^1.11.13",
          "vue": "^3.4.37"
        },
        "devDependencies": {
          "@vitejs/plugin-vue": "^5.1.2",
          "vite": "^5.4.1"
        }
      }
    6. 基本可以了,然后就是打包,生成dist 文件夹,切换到 dist 文件目录下。执行 npm init -y, 生成 配置文件,我的是这样的

      javascript 复制代码
      {
        "name": "custom-directives-qingyun", // 你的插件名称
        "private": false,
        "version": "1.0.3",
        "main": "custom-directives.es.js",
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1"
        },
        "keywords": [],
        "author": "",
        "license": "ISC",
        "description": ""
      }
    7. 然后还可以自己加 README.md 文件,我的是这样的

  3. 注册npm 账号(有账号可以直接跳过)

    1. 切换镜像

      javascript 复制代码
      npm config set registry=https://registry.npmjs.org
    2. 注册

      javascript 复制代码
      npm adduser

      依次填入账号、密码、邮箱, 填写完成后邮箱会收到一个npm发的一次性密码(也就是验证码) 再次填入即可,如果还未填写就报错

    3. 提交代码,一定是在 dist 目录下提交的,别搞错了

      javascript 复制代码
      npm publish
    4. 成功了是这样的

    5. 然后去npm 自己的账号下看看 package ,估计也需要梯子才能访问正常

    6. 上传成功就是 下载了

      javascript 复制代码
      npm i custom-directives-qingyun
  4. 如何使用

    1. 全局引入
    javascript 复制代码
    import { createApp } from "vue";
    import "./style.css";
    import App from "./App.vue";
    import index from "./plugins/index";
    import customDirectivesQingyun from "custom-directives-qingyun";
    
    const app = createApp(App);
    
    app.use(index);
    app.use(customDirectivesQingyun);
    app.mount("#app");
    1. 使用,搞个div 试试

      javascript 复制代码
          <div class="box" v-resize="'width'"></div>

      一切正常,

  5. 看不懂或者有问题的地方可以多评论,我会及时回答

相关推荐
源去_云走15 小时前
自建 Iconfy API 服务:解决国内访问不稳定问题
前端·容器·npm·node.js
lee57621 小时前
鄙人的 Vue 3.0 商业级开源甘特图已经发布到 npm
前端·vue.js·npm·开源·甘特图
小信丶2 天前
解决 pnpm dev 报错:系统禁止运行脚本的问题
前端·vue.js·windows·npm
小邋遢2.02 天前
vscod 执行npm build报错:Error: Cannot find module ‘vite‘
前端·npm·node.js
孟陬2 天前
2025-12-11 之后前端 npm 如何发包 How to Publish NPM Package in Year 2025
npm·node.js·bun
吴敬悦2 天前
私有的 GitHub Package 怎么拉取?
npm·github
前端郭德纲3 天前
React 19.2 已发布,现已上线 npm!
前端·react.js·npm
LYFlied3 天前
【一句话概括】前端项目包管理器怎么选?
前端·npm·pnpm·yarn
LisEcho4 天前
yoyoj-rn — RN 的脚手架工具可以不是 @react-native-community/cli
前端·react native·npm
醉风塘4 天前
NPM:从“模块之痛”到“生态之基”的演化史
前端·npm·node.js