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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@zeroer/general-tools

v1.1.16

Published

node common tools collection

Downloads

8

Readme

踩坑 Tip

  • alias 配置

    • 当仅使用 babel 构建项目的 esm 时 alias 处理很棘手
      • module-alias tsconfig-paths 不该用在其他 npm 模块中使用,因为它会修改默认 require 行为!(应用场景 用于开发最终项目,例如网站、应用程序、一次性 cli 脚本等)
      • babel-plugin-module-resolver 能够解决问题 配置与 webpack 或 vite 的 alias 一样
        // .babelrc.js
        ['babel-plugin-module-resolver', {
          alias: {
            '@': './src'
          }
        }],
      • babel-plugin-tsconfig-paths-module-resolver 可以直接读取 tsconfig.json 并正确设置
    • 当使用 tsc 构建 发出声明文件 并不会转换别名
      • 使用 tsc-alias 对 tsc 处理过没有转换的别名继续处理
  • typescript 与 ts-node 一起使用 设置 tsconfig.json 问题

    • 当 tsconfig.json 设置 "module": "ESNext" 执行 ts-node 报错 package.json 加入"type": "module" 改完了又报 unknown file extension .ts

    • 解决方案

  • 测试 tree shaking

    • 这 2 种方式都是 tree shaking 有效方式 但是都不能解决副作用的问题(即便你没有引用一个模块其中的副作用代码仍然会被打包进去)
      export { default as xxx } from './xxx' // 或者 import xxx from './xxx'; export { xxx }
      export * from './xxx'
  • esm 是打成一个文件好(方便)还是多个文件好呢?

    • 目前看到的 vue antd 都是多个文件(目的 可能是为了更有效的去除副作用?)
  • 多个类型包(cjs、esm、umd)是可以复用同一份 ts 类型的 只需要在 package.json 中指定 typings 字段

    • 但是一般对于一些 ui 库允许下面这种引用方式 需要也能使用 ts 的类型 只能每种类型包下都构建一份 ts 类型
      import Button from 'antd/es/button'
  • 方便的本地测试 首先明确测试的是构建的产物不是源码

    • 最简单的方式 直接引用 构建好的文件(ts 类型 已经通过每种类型包下都构建一份 ts 类型)

    • 使用 yarn link 自己测自己(还真挺好用的 安装新包不会被"冲掉")

构建 纯 js library

  • babel 用来构建 esm/cjs

  • umd 只要一个文件所以使用 rollup(vite)构建

    • 注意 vite 打包用的是 esbuild 配置 babel 不会影响使用

打什么样的包

  • 只是在 node esm & cjs

  • 只是在 webpack(前端) esm & umd

  • 只是在 浏览器 esm & umd (esm 可以直接用于 script 标签 type="module",umd 可以直接用于 script 标签)