GitHub 上每天都有新项目诞生,但大部分都被淹没在信息的海洋里。今天发现三个有意思的小众项目,专注解决特定场景下的实际问题。


react-exe:浏览器里的 React 沙盒

vgulerianb/react-exe · 181 ⭐

这个库解决了一个简单但常见的需求:在浏览器里安全地执行 React 组件代码。

它把传入的 JSX 字符串编译成可在浏览器直接运行的组件,配合 iframe 沙箱实现代码隔离。对于需要在线展示 React 组件效果的场景(文档站、教程、组件库 Demo 等)特别有用。

import { useReactExe } from 'react-exe';

const code = `
  export default function App() {
    return <h1>Hello World</h1>
  }
`;

function MyComponent() {
  const { Component, loading, error } = useReactExe({ code });
  
  if (loading) return <div>编译中...</div>;
  if (error) return <div>编译错误: {error.message}</div>;
  
  return <Component />;
}

核心原理是在客户端动态编译 JSX,支持自定义作用域注入,还能配置 iframe 的 CSP 策略。


vite-plugin-mkcert:一键 HTTPS 本地开发

liuweiGL/vite-plugin-mkcert · 747 ⭐

本地开发 HTTPS 一直是件麻烦事:自签名证书浏览器不信任,配置过程繁琐。

这个 Vite 插件自动生成本地受信任的 HTTPS 证书,无需手动操作。

// vite.config.ts
import mkcert from 'vite-plugin-mkcert';

export default {
  plugins: [
    mkcert()  // 就这么简单
  ]
};

首次运行时会自动安装本地 CA 证书并生成域名证书,后续启动直接使用已生成的证书。支持自定义域名、证书保存路径,也允许配置代理服务器。

对于需要测试 HTTPS 特性(Service Worker、Geolocation、摄像头等)的项目,省去大量配置时间。


Module Federation for Vite:微前端的基础设施

module-federation/vite · 614 ⭐

Webpack 的 Module Federation 一直是微前端的标杆方案,现在 Vite 生态也有官方支持了。

这个插件让 Vite 项目能够像 Webpack 一样实现模块联邦:应用 A 可以动态加载应用 B 的组件,双方独立部署、独立构建。

// 暴露模块(远程应用)
// vite.config.ts
import { federation } from '@module-federation/vite';

export default {
  plugins: [
    federation({
      name: 'remoteApp',
      filename: 'remoteEntry.js',
      exposes: {
        './Button': './src/components/Button.tsx',
        './Header': './src/components/Header.tsx'
      },
      shared: ['react', 'react-dom']
    })
  ]
};
// 消费模块(宿主应用)
federation({
  name: 'hostApp',
  remotes: {
    remote: 'remoteApp@http://localhost:5001/mf-manifest.json'
  },
  shared: ['react', 'react-dom']
});
// 动态加载远程组件
const RemoteButton = lazy(() => import('remote/Button'));

插件处理了 Vite 原生不支持的依赖共享、远程模块加载等问题,目前已支持生产环境构建。


小结

项目场景Stars
react-exeReact 组件在线执行181
vite-plugin-mkcert本地 HTTPS 开发747
module-federation/vite微前端架构614

三个项目解决的都是具体且高频的开发痛点,代码量不大但设计精巧。如果你的项目有类似需求,值得一试。