跳转到内容

npm create 是如何创建一个项目模板的?

为什么使用npm create vite能够初始化一个 Vite 项目?这条命令的背后究竟做了什么?

今天,我们就来探讨一下npm crate是如何初始化一个项目的?

create 背后的原理

create其实就是init的别名,我们可以使用npm init -h查看:

npm init -h

同时也可以注意到:

npm init一个包名,实际上就是在包名前面拼接上了create-,然后再使用npx create-包名进行执行;如果名称以@开头,则会在后面拼接/create

👉 所以:

  • npm create vite = npx create-vite
  • npm create @xxx = npx @xxx/create

npx大家都很熟悉,它就是去 npm 仓库临时下载一个库并运行它。

也就是说:要想使用npm create vite来初始化一个项目,就必须先在 npm 仓库中发布一个create-vite库。

真正提供“初始化项目”能力的:其实是create-vite库,与npm无关!

简单验证一下

首先,我们去 npm 仓库搜一下,是否真的存在一个create-vite这样的库?

create-vite

能找到,确实是有的!

然后,全局安装这个库,并在本地运行:

bash
# 全局安装
npm i create-vite -g

# 运行
create-vite

最后运行效果,与使用npm create vite是完全一样的。

运行效果

其他支持 create 的包

因此,很多新兴框架为了降低用户的使用门槛,通常都会发布自己的create-xxx包。

比如:

  • npm create vue
  • npm create next-app
  • npm create rsbuild
  • npm create expo-app
  • npm create tauri-app

为了确保使用的包是最新的版本,通常都会在包名后面加上@latest,比如npm create vite@latest

除了npm,常用的包管理工具yarnpnpmbun也都支持create指令,它们的用法也基本相同。不过bun的功能相对更强一些,它不仅支持 npm 仓库,还支持从 Github 仓库和本地模板初始化项目。

小结

总结下来,我们只需知道这几点:

  1. npm create vite等效于npx create-vite
  2. 它会自动在vite前面拼接create-
  3. 真正提供“初始化项目”能力的是create-vite库,而不是npm