Skip to content

18.融入开源生态:编写 npm init 项目让用户更方便

927字约3分钟

2024-10-06

随着时代的发展,脚手架也不断地变革。更多的脚手架会使用 npm init 或者 npm create 来创建项目。其实这两个命令没什么区别。

以我们常用到 vue-cli 工具。

目前 vue 的脚手架已经进行版本分化。首先原来的 vue-cli 工具进入了维护状态。目前只支持使用 Webpack 项目的创建。新的脚手架工具全部转为 create-vue,使用 vite 构建。

哪种构建工具好,不是我们讨论的话题。我们来通过这个案例分析一下脚手架工具的流行趋势,

从 vue-cli 到 create-vue ,脚手架工具命令行界面的变革。

# 用 @vue/cli 创建项目
sudo npm i @vue/cli
vue create my-app

# 用 create-vue 创建项目
npm create vue my-app

很显然你会发现后者更加的简单,只需要一条语句而且无需提前安装。这个体验真的是太棒了。

用户故事 (UserStory)

让组件库脚手架可以通过 npm create 使用, 让用户使用更方便。

任务分解 (Task)

  • 支持 npm init 功能;
  • 测试 npm init 功能。

支持 npm init

其实这个功能实现起来比较简单,不需要修改代码。这个属于一种约定,了解一下就可以了。

docs.npmjs.com/cli/v10/commands/npm-init/

我们可以查阅 npm 的官方文档。里面对 npm init 功能有以下描述。

npm init <initializer> 可以被用于安装一个新的或已经存在的 npm 软件包。

Initializer 是一个被命名为 create-的软件包。它会通过 npm-exec 运行。

以 ssy-ui 的 cli 为例,只需要将软件包名称命名为 create-ssy-app,然后发布到 npm,就可以通过。

提示

发布成功后虽然可以在 npm 上看到,但大概要半小时后才能正常使用。

npm init ssy-app

# 两者功能是一致的。
npm create ssy-app

我们的库正好是按照这样的命名规约命名,所以不需要修改。

下面来测试一下:

果然这种方法是可以生效的。

参与 Vite 生态

根据 Vite 官方文档,Vite 的脚手架目前分为官方脚手架和第三方脚手架。

第三方脚手架全部使用 degit 安装。

https://github.com/vitejs/vite/tree/main/packages/create-vite

degit 是一个简洁版的脚手架工具。它的特点是可以只需要创建项目模版而无需自己编写脚手架 CLI。 只需要使用 degit 就可以克隆模版项目创建自己的项目了。

https://github.com/Rich-Harris/degit

首先全局安装 degit

npm install -g degit

然后测试一下我们项目是否可以这样使用, 根据规则 degit 的后面参数应该是模版软件的 github 地址。我们按照描述运行。

npx degit mqxu/ssy-ui-template my-app

一样可用。

第三方脚手架全部汇总在 awesome-vite 的网站上

复盘

本节的主要内容是介绍如何实现 npm init 功能。

本节内容很少,甚至不需要修改代码。只是阅读了一个简短的英文文档,遵循了某个约定就让npm init 支持了 组件库的安装。

开源社区和 Npm 软件生态像一部庞大的机器,它需要的是你不断添加新的零件。这就需要不断地了解规则,遵循规则才能收到效果

最后留一些扩展任务:

  • 思考如何更好的参与 Vite 生态。