npm create vue@latest 执行过程
1. 引言
目前(2024年3月13日),打开Vue的官网,可以发现其推荐新建一个Vue项目的命令是npm create vue@latest,为啥这句命令就可以创建一个Vue项目呢
2. 执行过程
根据NPM的命令文档:npm init - npm 中文文档 (nodejs.cn)
npm init <package-spec> (same as `npx <package-spec>)
npm init <@scope> (same as `npx <@scope>/create`) aliases: create, innit
可知,npm create vue@latest 等同于npm init vue@latest,等同于npx vue@latest
根据上面的文档描述
npm init <initializer>可用于设置新的或现有的 npm 包。在这种情况下,
initializer是一个名为create-<initializer>的 npm 包,它将由npm-exec安装,然后执行其主 bin —— 大概是创建或更新package.json并运行任何其他与初始化相关的操作。init命令转化为对应的
npm exec操作如下:
npm init foo->npm exec create-foo
所以,npm init vue@latest等同于执行npm exec create-vue@latest
关于npm exec,命令文档参考:npm exec - npm 中文文档 (nodejs.cn)
npm exec -- [@]
此命令允许您在与通过
npm run运行类似的上下文中从 npm 包(本地安装或远程获取)运行任意命令。如果未提供
-c或--call选项,则使用位置参数生成命令字符串。如果未提供--package选项,则 npm 将尝试根据以下启发式方法从作为第一个位置参数提供的包说明符中确定可执行文件名称:
- 如果包在
package.json的bin字段中有一个条目,或者如果所有条目都是同一命令的别名,则将使用该命令。- 如果包有多个
bin条目,其中一个与name字段的无范围部分匹配,则将使用该命令。- 如果这不会导致恰好一个选项(或者因为没有 bin 条目,或者它们都不匹配包的
name),那么npm exec会以错误退出。
可知,npm exec create-vue@latest会运行create-vue包(版本为latest)的package.json 中的bin字段指定的js文件,如果本地没有create-vue包则会自动远程获取
那create-vue包下的bin是什么呢?
查阅NPM包:create-vue - npm (npmjs.com)
{
"name": "create-vue",
"version": "3.10.1",
"description": "An easy way to start a Vue project",
"type": "module",
"bin": {
"create-vue": "outfile.cjs"
},
// ...
}
可知是"outfile.cjs",这个文件是构建之后的代码,不易阅读,如果想要看构建之前的代码,可以查看:vuejs/create-vue: ️ The recommended way to start a Vite-powered Vue project (github.com)
查看这个项目的index.ts文件,可以知道其实就是根据CMD窗口的提示与输入,创建相应的文件或者文件夹、执行一些命令行代码,例如创建package.json,README.md文件等,可参考下面的部分代码
// Supported package managers: pnpm > yarn > npm
const userAgent = process.env.npm_config_user_agent ?? ''
const packageManager = /pnpm/.test(userAgent) ? 'pnpm' : /yarn/.test(userAgent) ? 'yarn' : 'npm'
// README generation
fs.writeFileSync(
path.resolve(root, 'README.md'),
generateReadme({
projectName: result.projectName ?? result.packageName ?? defaultProjectName,
packageManager,
needsTypeScript,
needsVitest,
needsCypress,
needsNightwatch,
needsPlaywright,
needsNightwatchCT,
needsCypressCT,
needsEslint
})
)
console.log(`\n${language.infos.done}\n`)
if (root !== cwd) {
const cdProjectName = path.relative(cwd, root)
console.log(
` ${bold(green(`cd ${cdProjectName.includes(' ') ? `"${cdProjectName}"` : cdProjectName}`))}`
)
}
console.log(` ${bold(green(getCommand(packageManager, 'install')))}`)
if (needsPrettier) {
console.log(` ${bold(green(getCommand(packageManager, 'format')))}`)
}
console.log(` ${bold(green(getCommand(packageManager, 'dev')))}`)
3. 参考资料
[1] CLI 命令 - npm 中文文档 (nodejs.cn)
[2] 彻底弄懂 npm init vue@latest 发生了什么 - 掘金 (juejin.cn)
[3] vuejs/create-vue: ️ The recommended way to start a Vite-powered Vue project (github.com)
npm create vue@latest 执行过程的更多相关文章
- 浅析vue-cli脚手架命令的执行过程
上一篇文章,已经大致了解脚手架是什么以及脚手架是如何工作的.接下来,稍微深入一下脚手架的工作过程(以vue-cli为例).首先抛出3个问题: 1.明明全局安装的是@vue/cli,最后执行的命令却是v ...
- 【MySQL】使用 Optimizer Trace 观察SQL执行过程
Optimizer Trace 是MySQL 5.6.3里新加的一个特性,可以把MySQL Optimizer的决策和执行过程输出成文本.输出使用JSON格式,便于程序分析和人类阅读. 使用方法 1) ...
- npm 发布 vue 组件
创建 vue 组件 1.创建vue项目,为了简洁方便,推荐使用webpack-simple构建一个项目 vue init webpack-simple your-project 2.在 src 目录下 ...
- openstack nova 源码解析 — Nova API 执行过程从(novaclient到Action)
目录 目录 Nova API Nova API 的执行过程 novaclient 将 Commands 转换为标准的HTTP请求 PasteDeploy 将 HTTP 请求路由到具体的 WSGI Ap ...
- MVC执行过程
HttpRuntime中的PR方法1,封装HttpContext2,获取HttpApplication 主要做3件事a,执行本事件时主要调用Init将Global编译得到类型,b,确保Appstart ...
- MySQL执行计划显示与执行过程不符合一例
一 建表和现象的过程如下 CREATE TABLE t1 (id1 INT, a1 INT, b1 INT, PRIMARY KEY(id1));CREATE TABLE t3 (id3 INT UN ...
- asp.net mvc4 Controller与Action执行过程的研究(学习笔记)
当IIS收到一个http请求,把请求信息发给对应的HttpModel(实际是实现类UrlRoutingModule),在HttpModel中会注册HttpApplication 类中的PostReso ...
- Java中JIN机制及System.loadLibrary() 的执行过程
Android平台Native开发与JNI机制详解 http://mysuperbaby.iteye.com/blog/915425 个人认为下面这篇转载的文章写的很清晰很不错. 注意Android平 ...
- IIS 内部运行机制及Asp.Net执行过程详解
一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
随机推荐
- ASP.NET Core分布式项目实战(oauth2 + oidc 实现 server部分)--学习笔记
任务15:oauth2 + oidc 实现 server部分 基于之前快速入门的项目(MvcCookieAuthSample): https://www.cnblogs.com/MingsonZhen ...
- 使用lvs实现ftp的负载均衡
操作系统:CentOS6.5_x64 问题描述 使用lvs实现ftp的负载均衡 为了使模型足够简单,这里只实现了loadblance,HA并未实现,可以借助keepalived实现. 具体实现 hos ...
- np.newaxis的用法
1 前言 np.newaxis的意思是给数组新增一个维度."python中矩阵切片维数微秒变化"中介绍了矩阵切片有时候会降低矩阵维度,为保证维度不变,可以用np.newaxis新增 ...
- 优先队列(PriorityQueue)常用方法及简单案例
1 前言 PriorityQueue是一种特殊的队列,满足队列的"队尾进.队头出"条件,但是每次插入或删除元素后,都对队列进行调整,使得队列始终构成最小堆(或最大堆).具体调整如下 ...
- junit运行Parameterized参擞化测试
Parameterized (参数化)的测试运行器允许你使用不同的参数多次运行同一个侧试. 运行此测试的必备条件: 1.必须使用@RunWith(Parameterized.class) 2.必须声明 ...
- 关于Image的mode属性(多图示例)
一.总览 Image的mode是指图片裁剪.缩放的模式,共有14个合法值,分别是: /** 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 */ scaleToFill ...
- 【防忘笔记】一个例子理解Pytorch中一维卷积nn.Conv1d
一维卷积层的各项参数如下 torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1 ...
- 在矩池云使用Llama2-7B的方法
今天给大家分享如何在矩池云服务器使用 Llama2-7b模型. 硬件要求 矩池云已经配置好了 Llama 2 Web UI 环境,显存需要大于 8G,可以选择 A4000.P100.3090 以及更高 ...
- Swift高级进阶-Swift编译过程,”SIL代码“,“IR语法”
swift编译过程 如果不懂LLVM,Clang的同学可以去了解下它的知识点 一些文章中有详细介绍 OC 的编译过程 ,本文来探索一下 Swift 的编译过程.Swift 的编译过程中使用 Swif ...
- github.com/json-iterator/go 详细教程
最近接触到了 github.com/json-iterator/go , 是由滴滴开源的第三方json编码库,它同时提供Go和Java两个版本. 文中大量内容来自 github 上的 wiki 文档, ...