NPM create命令
很多开源项目的文档里都有类似这样的命令:
npm create vue@latest
你会不会好奇:这不就是建个项目吗?为什么不用 npm install?
这篇文章帮你彻底搞懂 npm create 是什么、怎么用,以及它和 npm init、npx 的关系。
npm create 是什么
npm create 是 NPM 提供的一个快捷命令,专门用于执行脚手架工具来快速创建项目。
先理解“脚手架”
在讲 npm create 之前,先搞懂一个概念:脚手架(Scaffolding)。
脚手架是一个自动化的项目生成工具。你回答几个问题,它就帮你生成一个完整的项目结构,省去手动建文件夹、配构建工具、写配置文件的麻烦。
比如你执行 npm create vue@latest,它会问你:
✔ Project name: » my-vue-app
✔ Add TypeScript? » Yes
✔ Add Vue Router? » Yes
✔ Add Pinia? » Yes
✔ Add ESLint? » Yes
回答完,它自动生成:
my-vue-app/
├── src/
│ ├── components/
│ ├── views/
│ ├── App.vue
│ └── main.ts
├── public/
├── index.html
├── package.json
├── tsconfig.json
└── vite.config.ts
一个能直接运行的项目就建好了。脚手架帮你把所有繁琐的初始化工作自动化了。
那 npm create 干了什么
npm create vue@latest
这条命令的本质就是:调用 create-vue 这个脚手架包来生成 Vue 项目。
它做的事情很简单:
- 找到
create-vue这个脚手架包 - 临时下载并执行它
- 脚手架启动交互式询问
- 根据你的回答生成项目文件
完整执行流程
当你执行 npm create vue@latest,背后发生了这些事:
npm create vue@latest
│
├── 1. 识别 create 命令
│ └── 转换为 npm init vue@latest
│
├── 2. npm init 调用 npx
│ └── 实际执行 npx create-vue@latest
│
├── 3. npx 查找 create-vue
│ ├── 本地 node_modules/.bin/ 有吗? → 没有
│ ├── 全局安装有吗? → 没有
│ └── 都没有 → 从 npm registry 临时下载
│
├── 4. 下载 create-vue@latest 到 NPM 缓存
│
├── 5. 执行 create-vue 包的入口脚本
│
├── 6. 交互式询问(TypeScript?Router?...)
│
└── 7. 生成项目文件 + 提示后续命令
└── cd my-app && npm install && npm run dev
npm create、npm init、npx 的关系
这是很多人最困惑的地方。三个命令到底什么关系?
一张图看懂
npm create vue@latest
│
└── 是 npm init 的别名
│
└── 内部调用 npx
│
└── 下载并执行 create-vue 包
逐层拆解
1. npm create = npm init(别名关系)
npm create vue@latest
# 完全等同于
npm init vue@latest
npm create 和 npm init 是同一个东西的两个名字。NPM 7+ 引入 create 作为别名,因为 npm create 读起来更直观——“创建一个项目”。
2. npm init <pkg> = npx <pkg>(执行关系)
从 NPM 6 开始,npm init <pkg> 会自动通过 npx 去执行对应的包。
npm init vue@latest
# 内部执行
npx create-vue@latest
3. npx 负责下载和执行
npx 会临时下载 create-vue 包并执行,执行完后不会保留在全局。
历史演进
| 阶段 | 命令 | 说明 |
|---|---|---|
| NPM 6 之前 | npm init |
只能生成 package.json,不能执行脚手架 |
| NPM 6 引入 | npm init <pkg> |
可以通过 npx 执行脚手架包 |
| NPM 7+ | npm create |
作为 npm init 的别名,语义更清晰 |
现在你看到 npm create、npm init、npx 三种写法,它们最终做的是同一件事。官方推荐用 npm create,语义最清晰。
npm create vs npm install
新手最容易搞混的两个命令:
| 命令 | 用途 | 结果 |
|---|---|---|
npm create vue |
执行脚手架 | 生成项目文件夹 + 源代码文件 |
npm install vue |
安装依赖包 | 在 node_modules 中添加 Vue 代码库 |
用生活中的例子来理解:
npm create→ 去超市买一盒配好的净菜(菜 + 调料 + 菜谱都配好了)npm install→ 只买一种调料(加到已有的食材里)
一个创建项目骨架,一个往项目里装依赖,完全两回事。
@latest 是什么
npm create vue@latest
这里的 @latest 指定了包的版本。
| 写法 | 含义 |
|---|---|
npm create vue@latest |
使用 create-vue 包的最新版本 |
npm create vue@3 |
使用 create-vue 包的 3.x 版本 |
npm create vue |
不指定版本(等同于 @latest,但不保证) |
建议始终带上 @latest,确保你使用的是最新的脚手架模板,获得最新的项目结构和特性。
常用脚手架一览
| 框架/工具 | 命令 | 底层包 |
|---|---|---|
| Vue | npm create vue@latest |
create-vue |
| Vite | npm create vite@latest |
create-vite |
| React | npm create react-app@latest |
create-react-app |
| Next.js | npm create next-app@latest |
create-next-app |
| Nuxt | npm create nuxt-app@latest |
create-nuxt-app |
| Express | npm create express-app |
express-generator |
规律:包名通常是 create-<工具名>,命令是 npm create <工具名>。
新手常见问题
Q:npm create 会把包安装到全局吗?
不会。脚手架包是临时下载到 NPM 缓存目录的,执行完后不会保留在全局或项目里。它只是用来“生成文件”的工具,用完即走。
Q:npm create 和 npx 用哪个?
两者最终效果相同。npm create 语义更清晰(创建项目),npx 更通用(执行任意包)。官方文档现在普遍推荐 npm create。
# 这两条命令做的是同一件事
npm create vue@latest
npx create-vue@latest
Q:提示“command not found”怎么办?
npm create 需要 NPM 6.0+。运行 npm -v 检查版本,如果过低,升级 Node.js(NPM 会一起升级)。
Q:为什么有的脚手架文档用 npx,有的用 npm create?
历史原因。老的文档可能用 npx,新文档普遍改用 npm create。功能一样,不用纠结。
Q:npm create 只能创建前端项目吗?
不是,只要有对应的脚手架包就行。比如 npm create express-app 创建 Express 后端项目。
本篇小结
npm create是创建项目的快捷命令,本质是调用脚手架包生成项目文件npm create=npm init,内部通过npx执行@latest确保使用最新版脚手架模板- 和
npm install完全不同:一个创建项目,一个安装依赖 - 常见用法:
npm create vue@latest、npm create vite@latest
现在再看到 npm create vue@latest,你应该清楚它背后的原理了——它不是在安装什么包,而是在帮你“搭建”一个完整的项目。