【若川视野 x 源码共读】第34期 | tdesign-vue 初始化组件

130 阅读1分钟

学习目标

了解 TDesign 中组件初始化命令

  • 新增组件: npm run init [组件名]
  • 删除组件:npm run init [组件名] del

学习计划

1.克隆项目

2.项目目录

1656227385(1).jpg

3.调试代码

image.png

4.具体实现(代码分析)

1.init入口

2.config.getToBeCreatedFiles 获取被创建的文件

3.outputFileWithTemplate 使用lodash(_.template)预编译

function outputFileWithTemplate(item, component, desc, _d) {
    console.log(__dirname, 'dwx') //当前目录
    const tplPath = path.resolve(__dirname, `./tpl/${item.template}`);
    let data = fs.readFileSync(tplPath).toString(); //异步把文件的数据读出来
    const compiled = _.template(data); //lodash 操作 创建一个预编译模板方法,可以插入数据到模板中 "interpolate" 分隔符相应的位置
    data = compiled({
        component,
        upperComponent: getFirstLetterUpper(component),
    });
    const _f = path.resolve(_d, item.file);
    createFile(_f, data, desc);
}

4.addComponent,通过fs命令创建目录及组件

function addComponent(toBeCreatedFiles, component) {
    // At first, we need to create directories for components.
    Object.keys(toBeCreatedFiles).forEach((dir) => {
        const _d = path.resolve(cwdPath, dir);
        fs.mkdir(_d, { recursive: true }, (err) => { //创建目录
            if (err) {
                utils.log(err, 'error');
                return;
            }
            console.log(`${_d} directory has been created successfully!`);
            // Then, we create files for components. 为组件创建文件
            const contents = toBeCreatedFiles[dir];
            contents.files.forEach((item) => {
                if (typeof item === 'object') {
                    if (item.template) {
                        outputFileWithTemplate(item, component, contents.desc, _d);
                    }
                } else {
                    const _f = path.resolve(_d, item); // 路径
                    createFile(_f, '', contents.desc);// 直接写入文件
                }
            });
        });
    });
}

5.命令总结

node

process.cwd(); 子进程的当前工作目录

process.argv

属性返回数组,其中包含启动 Node.js 进程时传入的命令行参数。 第一个元素将是 process.execPath。 第二个元素将是正在执行的 JavaScript 文件的路径。其余元素将是任何其他命令行参数。

path.resolve 将路径或路径片段的序列解析为绝对路径

lodash

_.template(data)

创建一个预编译模板方法,可以插入数据到模板中 "interpolate" 分隔符相应的位置

感悟

1.复习node的一些操作 2.学习了一个构建项目的思想,可以使用在项目中减少部分操作 3.提升写笔记的能力