前一阵子从0到1做了一个 vue的项目,为了下次使用方便,写了一个preset
,也顺便聊聊这个项目中的一些东西。
根据官网的文档:
你可以通过发布 git repo 将一个 preset 分享给其他开发者。这个 repo 应该包含以下文件:
preset.json
: 包含 preset 数据的主要文件(必需)。generator.js
: 一个可以注入或是修改项目中文件的 Generator。prompts.js
一个可以通过命令行对话为 generator 收集选项的 prompts 文件。发布 repo 后,你就可以在创建项目的时候通过
--preset
选项使用这个远程的 preset 了
我们先在 GitHub 新建一个 repo,在这个 repo 中增加三个文件:preset.json
、generator.js
、prompts.js
。
prompt.js
是允许用户通过命令行对话的方式进行项目的配置,这次没有涉及到,所以直接 export
空数组就行:
1 | module.exports = [] |
generator.js
这个文件负责的就是注入或是修改项目中文件。这里主要用到的两个 API 是:
api.extendPackage
:用来会扩展项目中的package.json
中的参数,包括依赖、scripts
以及其他在package.json
中用到的配置api.render
:用来将模板项目中的文件拷贝到初始化的项目中(当你需要创建一个以.
开头的文件时,模板项目中需要用_
替代.
)
需要注意的是aoi.render
在拷贝文件的时候是用EJS
去实现,所以在处理比如index.html
中的<%= BASE_URL %>
时,需要转义成<%%= BASE_URL %%>
。当然,你也可以使用EJS
对文件中的代码进行更细粒度的控制。
1 | module.exports = (api, options, rootOptions) => { |
preset.json
主要是 vue 的配置,这个配置内容可以在用 vue create xxx
初始化项目并保存为本地模板后,~/.vuerc
文件中找到对应的配置内容,比如:
1 | { |
这些都弄好后,就可以直接用vue create --preset leo-tools/vue-cli-preset <YOUR PROJECT NAME>
生成新的项目了。上面 --preset
后跟的参数就是 GitHub 的 username/repo
,比如这个项目就是leo-tools/vue-cli-preset
。
今天先写这么多吧,下一期来聊一聊这个项目中的架构以及一些优化。