npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

babel-plugin-lazy-load

v1.0.4

Published

A Babel plugin to split React component for lazy load

Readme

babel-plugin-lazy-load

是什么

基于React.Suspense React.lazyDynamic Import,通过此 babel 插件,对开发者无感知的前提下,构建时将组件拆分为对应端的不同 chunk,在运行时判断并懒加载对应端的资源,从而减少首屏文件体积,提高使用者体验。目前设计用于多端组件场景,未来可考虑将转换功能通用化。

转换前

import React from 'react'
import { Button } from '@ad/r-ui'

export default function App() {
  return (
    <div className="app">
      <Button type="primary">click me</Button>
    </div>
  )
}

转换后

import React, { Suspense, lazy, useState, useEffect, forwardRef } from 'react'
import { useMobile } from '@ad/r-ui'

const Button = forwardRef((props, ref) => {
  const isMobile = useMobile();
  const [Comp, setComp] = useState<any>(null);

  useEffect(() => {
    setComp(
      lazy(() =>
        isMobile
          ? import(/* webpackChunkName: 'rui-mobile' */ '@ad/r-ui/es/components/button/mobile')
          : import(/* webpackChunkName: 'rui-pc' */ '@ad/r-ui/es/components/button/pc'),
      ),
    );
  }, [isMobile]);

  return <Suspense fallback={null}>{Comp ? <Comp ref={ref} {...props} /> : null}</Suspense>;
});

export default function App() {
  return (
    <div className="app">
      <Button type="primary">click me</Button>
    </div>
  )
}

使用插件前后构建产物对比

使用前

使用后

怎么用

npm install babel-plugin-lazy-load --save-dev

Via .babelrc or babel-loader.

{
  "plugins": [["lazy-load", options]]
}

options

interface Options {
  /** 默认@ad/r-ui */
  libraryName?: string
  /** 拆分chunk的名字 */
  chunkNames?: {
    /** pc端chunk名,默认rui-pc */
    pc?: string
    /** 移动端chunk名,默认rui-mobile */
    mobile?: string
  }
  /** 对应端目录 */
  libraryDir?: {
    pc?: LibraryDirType
    mobile?: LibraryDirType
  }
  /** 组件有各自的chunk,默认false,即合并到两端各自的chunk中 */
  splitChunkByComp?: boolean
  /** 详细说明,默认false */
  verbose?: boolean
}

相关链接