用Vite快速创建React×TypeScript环境的最简版本

使用Vite来创建React×TypeScript环境。

有很多种打包工具,但基于esbuild的vite打包速度快,而且可以进行类似webpack的详细配置,因此最近经常使用。
此外,在开发构建期间,由于具备HMR功能,当源代码发生变化时,它会自动在浏览器中进行更新,使开发非常舒适。

选择以下的vite命令交互方式即可为您创建模板,这种方式非常直接。

$ npm create vite@latest
// yarnの場合は
$ yarn create vite@latest
スクリーンショット 2023-10-09 11.00.52.png

因为仅仅这样说还有点无趣,我会简单解释一下。

样本
github

由于示例目录结构较简单,已做出如下更改。

.
├── README.md
├── package.json
├── src
│   ├── App.tsx
│   ├── index.html
│   ├── main.tsx
│   └── vite-env.d.ts
├── tsconfig.json
├── vite.config.ts
└── yarn.lock

package.json的内容如下所示。
您可以使用npm dev进行开发构建,使用npm build进行生产构建。

{
  "name": "vite-react",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build"
  },
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/node": "^20.6.0",
    "@types/react": "^18.2.15",
    "@types/react-dom": "^18.2.7",
    "@vitejs/plugin-react-swc": "^3.3.2",
    "typescript": "^5.0.2",
    "vite": "^4.4.5"
  }
}

Vite的build配置需要在vite.config.ts文件中进行编写。
需要进行@vitejs/plugin-react-swc插件的配置设置。
在build属性中写入详细的配置。
示例中编写了针对生产构建的配置。

import { resolve } from 'path';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';

// https://vitejs.dev/config/
export default defineConfig({
  root: 'src',
  plugins: [react()],
  build: {
    // distフォルダに出力
    outDir: resolve(__dirname, 'dist'),
    // 存在しないときはフォルダを作成する
    emptyOutDir: true,
    rollupOptions: {
      // entry pointがあるindex.htmlのパス
      input: {
        '': resolve(__dirname, 'src/index.html'),
      },
      // bundle.jsを差し替えする
      output: {
        entryFileNames: `assets/[name]/bundle.js`,
      },
    },
  },
});

在src/index.html中有一个html代码段,用于嵌入React应用程序。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>タイトル</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script type="module" src="/main.tsx"></script>
  </head>
<body>
  <div id="root" />
</body>
</html>

在 main.tsx 文件中,编写了 React 的初始化处理代码。

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App.tsx';

ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
);

只需要提供一个选择:
src/vite-env.d.ts用于定义环境变量的类型。
由于vite内置了dotenv库,可定义环境变量,
通过在此文件中添加环境变量类型定义,可以在引用处使用环境变量的类型。

TypeScript 提供了自动补全功能。

/// <reference types="vite/client" />

// 以下にReactで参照する環境変数の型定義を書く

ESLint和Prettier的引入

我们将引入语法检查和代码格式化器。
在这方面有很多不同的做法,
因此在选择哪个软件包以及eslint和prettier规则方面也存在个人偏好,
这仅供参考。

  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^6.0.0",
    "@typescript-eslint/parser": "^6.0.0",
    "eslint": "^8.45.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-prettier": "^5.0.0",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.4.3",
    "prettier": "^3.0.0",
  }

在ESLint中,语法检查规则可以在.eslintrc.cjs文件中进行定义。

module.exports = {
  root: true,
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    tsconfigRootDir: __dirname,
    sourceType: 'module',
  },
  plugins: ['react-refresh', '@typescript-eslint/eslint-plugin'],
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:react-hooks/recommended',
    'plugin:prettier/recommended',
  ],
  env: {
    node: true,
    jest: true,
    browser: true, 
    es2020: true,
  },
  ignorePatterns: ['dist', '.eslintrc.cjs'],
  rules: {
    'react-refresh/only-export-components': [
      'warn',
      { allowConstantExport: true },
    ],
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
  },
};

创建.prettierrc文件来配置语法格式化规则。

{
  "tabWidth": 2,
  "singleQuote": true,
  "semi": false,
  "trailingComma": "all"
}

只需用以下命令生成的dist文件夹,然后进行托管即可显示本次正式构建。

$ npm build
もしくはyarnの場合は
$ yarn build

引入CSS库

可以直接在行内编写CSS,而且Vite本身也支持CSS模块。

    • cssをモジュール化したい

 

    • global style書きたい

 

    • media query書きたい

 

    Themeで一括にアプリ全体のCSSを適用したい

因为经常发生这种事情

我们会使用vanilla-extract,它是一个轻量级、最小化且具备上述功能的类型安全工具,非常方便开发。详见https://vanilla-extract.style/。

将包导入自身非常简单。只需在package.json中添加包并进行安装。

  "dependencies": {
    "@vanilla-extract/css": "^1.13.0",
  }
  "devDependencies": {
    "@vanilla-extract/vite-plugin": "^3.9.0",
  }

在vite.config.ts中添加插件

import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react(), vanillaExtractPlugin()],
广告
将在 10 秒后关闭
bannerAds