如何建一个好的npm包

124 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

我们希望建一个npm包,希望它能支持一些比较方便的特性,比如按需加载,比如树摇,比如es module等等,该怎么搞呢?

我们将分为以下几个步骤。

  1. 建立npm仓库,决定好入口,这个要根据我们的设计来
  2. 建立源码文件夹,可以用src
  3. 建立esmodule入口和commonjs的入口main,我们构建的时候需要同时打包这两种
  4. 引入type文件
  5. 指定一下types文件,
  6. 指定下files文件,指定发布的内容
  7. 使用prepare脚本,在发布前构建一下,这样就不会忘发布了 8, 构建的时候需要自动清一下垃圾
  8. 使用ts写代码,通过tsc构建生成index.d.ts文件
  9. dependencies只放运行时依赖的包
  10. 打包构建的话依然推荐用rollup

需要注意的是,我们将上述准备工作做好之后,后续的该怎么写呢

首先就是我们需要确定好一个主要的基调,即我们都需要暴露什么api,这些个api暴露和使用的形式,他们之间的关系需要确定下来。

比如我们需要建立一个类似于react的api,我们可以直接引用react,也可以引用它里面的一些边缘的方法,如useEffect等等。也就是说我们有一个总的入口,也有边缘乱七八糟的入口,这样的方式非常常见。

但是我们如果需要按需引用,这就需要我们在文件上作区分,包里面需要进行比较细致的拆分,这样的成本比较高,但是为了实现类似于增量引用的效果。我们可以打包的时候对按需引用的语法进行一个解析,然后只加载需要的内容,就类似于antd的用法,也可以直接复用antd的增量引用库