Vite plugins学习之手写 alias 插件

/**
 * @description: vite插件
 * 通过vite.config.js 返回出去的配置对象,以及我们在插件config的生命周期中返回的对象,都不是最终的一个配置对象
 * vite 会把这几个配置对象进行一个 merge 合并
 */

const fs = require("fs");
const path = require("path");

function diffDirAndFile(arr = [], basePath = "") {
  const result = {
    dirs: [],
    files: [],
  };
  arr.forEach((name) => {
    const currentFileStat = fs.statSync(
      path.resolve(__dirname, `${basePath}/${name}`)
    );
    const isDirectory = currentFileStat.isDirectory();
    if (isDirectory) {
      result.dirs.push(name);
    } else {
      result.files.push(name);
    }
  });
  return result;
}

function getDir(keyName) {
  const basePath = "../../src";
  const result = fs.readdirSync(path.resolve(__dirname, basePath));
  const diffResult = diffDirAndFile(result, basePath);
  const resolveAlias = {};
  diffResult.dirs.forEach((dirName) => {
    const key = `${keyName}${dirName}`;
    const absolutePath = path.resolve(__dirname, `${basePath}/${dirName}`);
    resolveAlias[key] = absolutePath;
  });
  return resolveAlias;
}

// realization alias plugin
module.exports = ({ keyName = "@" } = {}) => {
  return {
    // config:当前的配置对象
    // env: 当前环境信息 { mode: "development", command: "serve" }
    config(config, env) {
      // 此时的 config 只是 Vite 传入的配置文件,并没有执行
      // Config 函数可以返回一个对象,这个对象是部分的vite config配置【其实就是需要修改的那一部分】
      const aliasRes = getDir(keyName);
      return {
        // 读取目录
        resolve: {
          alias: aliasRes,
        },
      };
    },
  };
};

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Iam_楠

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值