返回

借鉴 create-vite 搭建自己的创建项目工具(2):项目搭建与发包

前端

引言

在上一篇文章《借鉴 create-vite 搭建自己的创建项目工具(1):源码分析》中,我们简单介绍了 create-vite 的源码知识。本文将继续深入探讨,带你动手搭建一个属于自己的创建项目工具。

项目初始化

首先,创建一个文件夹,然后执行以下命令进行初始化:

mkdir my-create-vite
cd my-create-vite
npm init @vitejs/create-app

安装依赖

初始化完成后,安装必要的依赖项:

npm install

创建项目

执行以下命令创建项目:

npm run create my-new-project

项目结构

创建成功后,项目结构如下:

my-create-vite
├── my-new-project
│   ├── package.json
│   ├── vite.config.js
│   ├── src
│   │   ├── App.js
│   │   ├── index.css
│   │   ├── index.html
│   └── README.md
└── package.json

修改代码

接下来,我们对 my-create-vite 项目进行修改,使其成为我们自己的创建项目工具。

  1. 修改 package.json

    修改 my-create-vite/package.json 文件,添加如下代码:

    "bin": {
      "create-my-project": "bin/create-my-project.js"
    }
    
  2. 创建 create-my-project.js

    在 my-create-vite/bin 目录下创建 create-my-project.js 文件,并添加如下代码:

    const { createProject } = require('./create-project');
    
    createProject(process.argv[2]);
    

    其中,createProject 函数是我们自定义的创建项目函数,将在稍后实现。

实现 createProject 函数

在 my-create-vite/bin/create-project.js 文件中,实现 createProject 函数:

const fs = require('fs');
const path = require('path');
const execa = require('execa');

function createProject(projectName) {
  const projectPath = path.join(process.cwd(), projectName);

  if (fs.existsSync(projectPath)) {
    console.error(`项目 ${projectName} 已存在`);
    return;
  }

  fs.mkdirSync(projectPath);
  process.chdir(projectPath);

  execa.sync('npm', ['init', '-y']);
  execa.sync('npm', ['install', 'vite', '--save-dev']);
  execa.sync('npm', ['install', 'create-react-app', '--save-dev']);

  const templatePath = path.join(__dirname, '..', 'template');
  fs.copySync(templatePath, projectPath, { recursive: true });

  console.log(`项目 ${projectName} 创建成功`);
}

发包

完成上述修改后,我们就可以发包了:

cd my-create-vite
npm publish

使用

发包成功后,我们就可以在全球范围内使用我们的创建项目工具了:

npx create-my-project my-new-project

结语

通过借鉴 create-vite,我们搭建了自己的创建项目工具,并将其发包发布。这是一个非常有价值的经验,不仅加深了我们对 Vite 和 JavaScript 生态的理解,还为我们提供了定制化开发工具的能力。