0.0.14-beta.8 • Published 4 months ago

crtp-cli v0.0.14-beta.8

Weekly downloads
-
License
ISC
Repository
github
Last release
4 months ago

crtp-cli

overview

管理模板文件/目录的工具。
目标:根据模板快速创建文件。

feature

  • 初始化项目
  • 初始化文件
    • 添加自定义模板文件(或目录)
    • 列出自定义模板文件(或目录)
    • 查询自定义模板文件(或目录)
    • 删除自定义模板文件(或目录)

install

npm i crtp-cli -g

usage

# 在指定目录创建一个指定的模板文件
crtp initFile readme.md --file ./first/readme.md
# 添加自定义的模板文件
crtp addFile first.json --file ./first/projName/package.json
# 创建express&ts的应用。需要先安装yarn
crtp initProject --projectName first

configuration

暂时不需要它 默认配置文件:<root>/crtp.config.js

api

<>为必填项
[]为选填项

commandoptionsvalue说明demoversion
-v, --Version列出当前版本
init生成配置文件0.0.14-beta.4-
initFile以指定模板文件为模板创建文件。
<fileType>模板文件名
--file file...目标文件路径
-st, --macroSubstitution用于宏替换。用空格分开源与目标,多对替换之间用空格分割。若源与目标不成对,则忽略。crtp initFile a.md --macroSubstitution a b c d e -- 表示:把a替换为b,把c替换为d,忽略e。v0.0.6
--registry registrynpm(default), yarn, tencent, cnpm, taobao, npmMirror, guazi.npmrc的注册器crtp initFile .npmrc --registry cnpm0.0.9
addFile把指定文件设置为模板文件
<filename>模板文件名
--[file] <file>要成为模板文件的路径
addFragment按指定碎片目录生成碎片文件。todo
initDir按指定模板目录生成目录
<dirName>模板目录名
--dir [dir...]目标目录名
addDir把指定目录设置为模板目录
<dirName>模板目录名
--dir <dir>要成为模板目录的路径
list / ls列出所有模板文件+碎片文件
isExistFile查询指定模板文件是否存在
<filename>模板文件名
delFile删除指定模板文件
<filename>模板文件名
delDir删除指定模板目录待开发
initProj待完善
<projName>
--path
--packageName
--packageVersion
--packageMain
--lernaInit
--readme
--no
--gitignore
--no
ip在当前目录中执行若干工程化命令
--npmrcboolean 默认为true是否生成 .npmrc 文件
--prettierboolean 默认为true是否生成.prettierignore .prettierrc.json
--readmeboolean 默认为true是否生成 readme.md
initProject创建express&ts的应用
--dir默念 ./指定应用所在的目录
--projectName默认 project-name应用的名称
--start默认 false在创建成功后是否启动项目
insert在指定的文件中插入代码片段(亦称“碎片”)0.0.14-beta.2+ 非gamma有效。
<fragment>指定碎片
--file指定文件

模板文件(或目录)

用于初始化文件。 已内置的模板文件:

  • readme.md
  • demo.md
  • .gitignore
  • vue3.vue

界碑说明

在内置的vue3.vue文件中有若干注释,用于标记特定位置。在下文中称为界碑。 界碑是不能删除的。

<template>                                          使用组件
    <div>MsBaseComp</div>
</template>

<script lang="ts">
    // utils                                        引入工具类方法
    import {
        defineComponent,
        ref,
        onMounted,
    } from 'vue'
    // components                                   引入组件
    // import { MsButton } from 'ms-ui'
    // check                                        引入校验方法
    // config                                       引入配置项
    // directives                                   引入指令
    // data                                         引入数据
    // hooks                                        引入钩子
    // import { useRouter } from 'vue-router'
    // type/interface                               引入类型
    // custom                                       本vue文件级的数据、方法等。

    export default defineComponent({
        name: 'MsBaseComp',                         组件名
        // components: {                            声明组件
        //     MsButton,
        // },
        // directives                               声明指令
        // inheritAttrs: false,
        props: {
            // fieldKey: {
            //     type: String,
            //     default: '',
            // },
        },
        // emits: ['blur'],
        setup() // props, ctx                       setup方法
        {
            // inject                               定义注入者
            // hooks                                定义钩子
            // variable                             定义变量
            // let clog = console.log
            // ref                                  定义响应式对象
            let elementRef = ref()
            // computed                             定义计算类对象
            // provide                              定义提供者
            // methods                              定义方法
            let init = () => {
                
            }
            // event fn                             定义事件的回调方法
            // watch                                定义监听器。watch/watchEffect
            // lifeCircle                           定义生命周期方法
            onMounted(() => {
                init()
            })
            // exec                                 在setup中执行的方法
            return {
                // variable                         输出变量
                // ref                              输出响应式对象
                elementRef,
                // computed                         输出计算类对象
                // methods                          输出方法
                // event fn                         输出事件回调方法
            }
        }
    })
</script>

<style lang="less" scoped>                          定义样式
</style>

碎片文件

适用范围

目标文件中的相关界碑。

字段说明

interface template {
    position: 'end' // 在template内的最后插入
    content: string // 插入的内容
}[]
interface script {
    position: 'setup.ref' // 在setup方法内的ref界碑处追加
     | 'setup.event' // 在setup方法内的event fn界碑处追加
     | 'setup.return.ref' // 在setup方法的return内的ref界碑处追加
     | 'setup.return.event' // 在setup方法的return内的event fn界碑处追加
     | 'custom' // 在custom界碑处追加。一般不要在这里写代码。
    content: string
}[]
interface style {
    position: 'end' // 在style内追加
    content: string
}[]
interface check {
    importUtils?: {
        [k: string]: string[]
    }
    importComponents?: {
        [k: string]: string[]
    }
    type?: {
        [k: string]: string[]
    }
    components?: string[]
}

principle

初始化项目

使用child_process调用npm init -y。现修改package.json。

操作模板文件

在此包的<root>/assets/中保存着模板文件。初始化时从此读取再写入指定位置。添加时从指定位置读取再写入此目录。

uml

暂无

todo

crtp-cli中的配置从配置文件中得到后与用户设置的配置合并后再使用。 使用loadFile引入文件(包括配置文件)。它是generator方法。 配置文件
在配置文件中为指定的模板文件设置插件列表。
为指定的基本设置插件。pluginFn(content) -> contentOther
使用配置文件中指定的包管理工具
可开发插件。 接入测试工具
本项目中基于各开发类框架开发。为它们提供配置文件。或在一个目录中统一管理配置文件,或…… 开发模块的顺序 优先级 cli > crtp.config.js > 默认配置 支持 cli / js 验证配置文件是否正确