前端脚手架的搭建

简介: 前端脚手架的搭建

image.png


本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前端脚手架

解决什么问题?


脚手架就是帮助你把项目的基础架子搭好。例如项目依赖、模板、构建工具等等。让你不用从零开始配置一个项目,尽可能快的进行业务开发。

公司已开发的项目是资产和宝贵经验,包含很多公用的逻辑。把原有项目单纯地复制粘贴存在以下问题:

  • 重复复制粘贴 dirty work
  • 容易忽略项目中的配置
  • 存在业务定制逻辑
  • 项目框架不同。基于 cra/vue-cli/vite。需要整合到一起。

前置准备: 找个项目模板

核心模块


  • 界面交互
  • 下载项目模板


【界面交互】项目初始化


  1. mkdir tracey-cli & cd tracey-cli
  2. npm init -y
  3. mkdir bin 新建 enter.js 文件,在 package.json 中增加 "bin": "bin/enter"
  4. 编辑 enter.js
#!/usr/bin/env node
// 关联依赖 commander 命令行指令配置
// npm i commander 
const { program } = require('commander');
const packageInfo = require('../package');
program.version(packageInfo.version, '-v, --version');
program.name(packageInfo.name)
  .usage(`<command> [option]`)
// 解析参数
program.parse(process.argv);
  1. 终端运行 npm link,添加 --force 可以强制覆盖原有指令

测试:


image.png

【界面交互】控制台输出样式


来了解下项目的依赖和这些依赖的简易使用:

  • chalk 命令行样式 *注意版本 4.1.2
  • ora 终端 loading *注意版本 5.1.0
  • figlet 生成终端的艺术字
// bin/enter.js
const chalk = require("chalk");
console.log(chalk.blue.underline.bold("调整样式"))
const ora = require("ora");
// 定义一个loading
const spinner = ora("加载中...");
// 启动loading
spinner.start();
setTimeout(() => {
  spinner.text = "失败";
  spinner.fail();
}, 1000);
const figlet = require("figlet")
console.log(
  "\r\n" +
  figlet.textSync(packageInfo.name, {
    font: "ANSI Shadow",
    horizontalLayout: "default",
    verticalLayout: "default",
    whitespaceBreak: true,
  })
);


image.png


【界面交互】命令行交互


  • inquirer *注意版本 8.1.4
const Inquirer = require('inquirer')
// 多选交互功能
new Inquirer.prompt([
  {
    name: "react",
    // 单选将这里修改为 list 即可
    type: "checkbox",
    message: "选择项目所需功能",
    choices: [
      {
        name: "Babel",
        checked: true,
      },
      {
        name: "TypeScript",
      },
      {
        name: "Router",
      },
    ],
  },
]).then((data) => {
  console.log(data);
});


image.png



【项目模板】项目模板


  • cross-spawn

获取项目模板 git clone or fs-extra

项目模板没有选择内部维护,如果想要内部维护的话可以选择 fs-extra 读取

const path = require('path')
const crossSpawn = require('cross-spawn')
const spawn = (command, args = [], options = {}) => {
  return new Promise((resolve) => {
    const cmd = spawn(command, args, Object.assign({ stdio: 'inherit', shell: true, cwd: '' }, options))
    cmd.on('close', code => {
      if (code !== 0) {
        return resolve({ command: `${command} ${args.join(' ')}` });
      }
      resolve();
    });
  })
}
// 下载模板
function download(project, git) {
  const cwd = path.join(process.cwd(), `${project}`);
  startLoad('', '下载中...');
  return new Promise(async (resolve, reject) => {
    let r = await spawn(`git`, ['clone', `${git.url}`, `${project}`, '-v', '--progress']);
    endLoad()
    if (r) {
      red('下载失败')
      return false
    }
    green('下载成功!');
    if (git.branch) {
      await spawn(`git`, ['checkout', `${git.branch}`], { cwd });
    }
    // 删除项目里的 .git 文件夹
    await remove(`./${project}/.git`);
    await spawn(`git`, [`init`], { cwd })
    if (r) return reject(err);
    return resolve(true)
  })
}

项目源码

项目源码

参考资料:

战场小包 【前端架构必备】手摸手带你搭建一个属于自己的脚手架

手把手教你写一个脚手架

目录
相关文章
|
6月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第3期】Node.js环境搭建(CentOS 7)
从脚手架开始学前端 【第3期】Node.js环境搭建(CentOS 7)
120 0
|
6月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
90 0
|
JSON 前端开发 JavaScript
从零打造你的前端开发脚手架
从零打造你的前端开发脚手架
216 0
|
1月前
|
资源调度 前端开发 JavaScript
前端研发链路之脚手架
本文首发于微信公众号“前端徐徐”。文章介绍了前端开发中脚手架工具的重要性及其工作原理。脚手架工具能够大幅提升开发效率,确保代码质量和项目一致性。文章详细探讨了脚手架的历史、工作原理、常见工具及其优势与潜在问题,并展望了其未来发展方向,帮助开发者更好地理解和应用脚手架工具。
44 4
前端研发链路之脚手架
|
2月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
3月前
|
JavaScript 前端开发
什么是前端构建工具?vite和vite脚手架的关系!
【8月更文挑战第1天】前端构建工具简析
84 4
|
6月前
|
资源调度 JavaScript 前端开发
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
|
6月前
|
前端开发 测试技术
前端反卷计划-脚手架-从0实现一个脚手架
前端反卷计划-脚手架-从0实现一个脚手架
|
6月前
|
JavaScript 前端开发 jenkins
前端反卷计划-脚手架-原理介绍
前端反卷计划-脚手架-原理介绍
|
缓存 JavaScript 前端开发
下一篇
无影云桌面