学习搭建一个自己的 vue 脚手架 目录是否存在

82 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

十二、目录是否存在

引言

这里开始新的学习系列,动手搭建一个属于自己的 vue 脚手架

主要以 vue 官方的 vue cli 作为参考和学习

方便自己在后续创建 vue 项目时,不必总是复制粘贴

目录是否存在

上几节,我们学到了如何正确的使用 Commands,以及里面 option

这一节,我们在 Commands 中,新增一个新的 option,并且处理 目录是否存在

首先在我们的 lib\core\commands.js 文件下,将 create 方法里面的 action 操作,封装成一个新的文件来处理

const { createAction } = require('./action/create')

const create = (program) => {
  program
    .command('create <app-name>')
    .description('create a new project powered by wzms-cli')
    .option('-p, --preset <presetName>', 'Skip prompts and use saved or remote preset')
    .option('-d, --default','Skip prompts and use default preset')
    .action((name,options) => {
        createAction(program, name, options)
    })
}

这里再创建一个目录和文件,在 lib\core\ 创建一个 action 文件夹,里面创建一个 create.js 文件,用来处理 action 的操作

流程

  • 判断当前输入的命令,是在哪个位置

    // 可以得到当前输入命令的位置
    process.cwd()
    
  • 判断这个当前这个目录下,是否存在,我们创建项目的 name 文件或者目录

    // 通过 node 的 path 模块,进行文件的
    path.resolve(cwd, name || '.')
    
    // 通过 fs 模块,进行判断
    fs.existsSync()
    

获取路径

这个文件的 lib\core\action\create.js 的详细代码如下

const path = require('path')
const fs = require('fs-extra')

const createAction = async (program, name, options) => {
  const cwd = process.cwd()
  console.log(cwd)

  const targetDir = path.resolve(cwd, name || '.')
  console.log(targetDir)
  console.log(fs.existsSync(targetDir))
}

module.exports = {
  createAction
}

option 控制

上面成功的获取到了 项目路径,下一步判断 是否存在

在判断之前,我们这里再加一个 option ,来控制判断是否删除还是保留,相当于再复习下 option

lib\core\commands.js 文件夹里的 create 方法,添加 optionforce 属性

    option('-f, --force', 'Overwrite target directory if it exists')

添加完成后,我们在 lib\core\action\create.jscreateAction 方法中新增

  if (fs.existsSync(targetDir)) {
    if (options.force) {
      await fs.remove(targetDir)
    } else {
    }
  }

即可成功判断

总结

我们处理了 目录是否存在,并且通过我们传递的 option 参数来进行控制