1.1.2 • Published 11 months ago

react-route-generate v1.1.2

Weekly downloads
-
License
ISC
Repository
-
Last release
11 months ago

react-route-generate

中文文档

Usage

Execute the following command anywhere to globally install this tool:

npm install react-route-generate -g

Install the tool package again in the project where you want to use it:

npm install react-route-generate --dev

Now you can use this tool in your project.

Purpose

This tool allows you to declare routes using annotations and generate the corresponding configuration file with the following options:

export interface IAutoRoute {
  routeName: string;
  lazy?: boolean;
  keepAlive?: boolean;
  cacheWithParams?: Array<string>;
}

This configuration is used to generate the specified configuration, but it does not have a practical effect during runtime. The implementation is as follows:

export function autoGenerateRoute(options: IAutoRoute) {
  return (target: any) => target;
}

Usage

In your project, simply add the autoGenerateRoute annotation wherever you want to generate the route configuration, for example:

...
import { autoGenerateRoute } from 'react-route-generate';

@autoGenerateRoute({
  routeName: '/createArchive',
})
@inject(`app`)
@observer
export default class CreateArchivePage extends BasePage<CreateArchiveStore> {
    ...
}

By doing this, you have declared a route. Then, execute the following command in the project's root directory:

react-route-generate generate

You will obtain a route configuration file like this:

import React, { lazy } from 'react';
import CreateArchivePage from '@/pages/Archives/CreateArchive';

/**
 * This file is auto-generated by react-route-generate, do not modify.
 * 这个文件由插件自动生成,请不要修改。
 */

export const router = [
  {
    path: '/createArchive',
    component: CreateArchivePage,
  },
];

The annotation also supports React's lazy function. Simply set lazy to true:

...
import { autoGenerateRoute } from 'react-route-generate';

@autoGenerateRoute({
  keepAlive: true,
  routeName: '/archiveDetails',
  lazy: true,
})
@inject(`app`)
@observer
@withActivation
export default class ArchiveDetailsPage
  extends BasePage<ArchiveDetailsStore>
  implements IKeepAlive
{
    ...
}

The generated configuration will be as follows:

...
  {
    path: '/archiveDetails',
    component: lazy(() => import('@/pages/Archives/ArchiveDetails')),
    keepAlive: true,
  },
...

The plugin is only responsible for generating the configuration file. The usage of keepAlive and the specific implementation of the route is left to you.

Configuration

The tool has a configuration file named router.config.ts, which affects the behavior of the plugin:

const routeConfig = {
  /**
   * Scan file base path
   */
  baseDir: "src/pages",
  /**
   * Setup generate file output path
   */
  outputDir: "src/routes",
  /**
   * Config file output name. This file can be used in the project.
   */
  outFileName: "routeConfig",
  /**
   * Output file extension. The default is `.ts`.
   */
  outFileExt: "ts",
  /**
   * Load file match regex
   */
  match: "**/*.ts",
  /**
   * Replace alias
   */
  paths: {
      '@/': ['*']
  },

  /**
   * Base project URL, with tsconfig
   */
  baseUrl: 'src',

 

 /**
   * Project root directory, with tsconfig
   */
  rootDir: './' 
};
exports.default = routeConfig;
    
    

The configuration file is generated automatically when the plugin is first run, so you don't need to create it manually.

  • baseDir

    Set the directory where the plugin will search for files with annotations.

  • outDir

    Set the output directory for the generated files.

  • outFileName

    Set the name of the output file.

  • outFileExt

    Set the file type of the output file.

  • match

    Set the regular expression for matching annotated files.

  • paths

    Used to generate alias routes.

  • baseUrl

    Set the base directory for path generation. It can be set according to tsconfig.json.

  • rootDir

    Set the root directory for path generation. It can be set according to tsconfig.json.

1.1.2

11 months ago

1.1.1

11 months ago

1.1.0

11 months ago

1.0.9

11 months ago

1.0.8

11 months ago

1.0.7

12 months ago

1.0.6

12 months ago

1.0.5

12 months ago

1.0.4

12 months ago

1.0.3

12 months ago

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago