npm init egg --type=sample 到底做了什么?

406 阅读3分钟

当我们在新建一个 Egg 项目的时候 都会执行 npm int egg --type=sample , 但是这条命令到底做了什么呢?,还是需要我们去探究一下的。


首先看到这条命令 --type=sample 肯定是参数, 先不用关心,下面我们再进行分析。现在我们来看 npm init egg 是什么意思?


看到 npm init 这个命令可以看出来这是一个 npm 官方命令,那我们就去查看官方文档对这个命令的说明: npm-init

有这样的一段描述:

npm init <initializer> can be used to set up a new or existing npm package.

initializer in this case is an npm package named create-, which will be installed by npx, and then have its main bin executed – presumably creating or updating package.json and running any other initialization-related operations.

对应的中文意思为:

npm init <initializer> 可以被使用创建一个新的或者已经存在的 npm 包

initializer 在这个命令中是一个 npm 包 ,名称为 create-<initializer>, 将要被 npx 安装,然后他们的 package.json bin 对应的脚本将被执行,执行的结果很大的可能是创建或者更新 package.json 文件, 运行一些其他的初始化关联操作。


下面是示例:

npm init foo -> npx create-foo

npm init @user/foo -> npx @user/create-foo

npx init @user -> npx @user/create


如果 initializer 被省略 ,即 npm init 将会交互式的问你几个问题创建一个 package.json 文件


明白了 npm init egg 代表什么意思,就是 npx create-egg 那我们就去看一下 create-egg npm 包 , github 仓库地址为: github.com/eggjs/creat…

首先查看 README 文件

Alias for egg-init, so you could use npm init egg showcase

说是 egg-init 的别名,这说明主要的逻辑应该都在 egg-init 仓库了


这里先看 npx create-egg 做了什么:

  1. 查看 package.json 文件发现 "bin": "./bin/create-egg.js"
  2. 然后去查看 ./bin/create-egg.js 文件,发现就只有一个 require('egg-init/bin/egg-init') ,这也说明主要的逻辑在 egg-init 仓库中。 到这 create-egg 的作用就完成了


接下来我们去看 egg-init 仓库,我们这里再次体现一下,查看开源代码先看 README 文件

该仓库的 README 文件已经说的很清楚了,关于怎么去使用该工具


最后还有一个 --type=sample 参数起到了什么作用?

查看文档发现有好几种模板类型,选定你需要的模板类型就会自动去下载对应的模本文件到你指定的目标文件夹中。

再下载模板文件的时候,会先从 egg-init-config 获取模板的配置信息, 来供你选择。


所有的模本项目都在 github.com/eggjs 这个组织下面


到此 对于 npm init egg --type=sample 做了什么已经讲了很清楚了。


补充知识:

packge.josn 文件中 mainbin 的作用分别是什么?

bin: 是 npm 包对外提供的命令行工具, 如果 npm 包是 全局安装就可以直接使用,如果是项目的依赖会被软链接到 node_modules 下的 .bin 文件夹中, 然后可以使用 npx 进行使用了

main: npm 包的入口文件