npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sx-route-config-grab-webpack-plugin

v1.0.5

Published

路由配置文件抓取

Downloads

12

Readme

路由配置抓取工具

路由配置最常用的方式,是一个path 对应 一个组件,我们可以通过脚本生成;文件路径是唯一的,甚至可以使用文件路径作为路由的path;

路由抓取方式

  1. 文件中编写 export const PAGE_ROUTE = '/user';常量,常量值作为路由的path,当前文件中默认导出的组件,作为路由的component,这种方式可以地址携带参数,比如我们可以定义这样的path:/user/:id
  2. 基于文件目录结构,生成路由的path,比如 src/pages/user/UserList.jsx,可以对应成 path: /user/UserList, component: path/to/UserList,这种方式不用定义路由path,但是路由跟目录结构有耦合关系,无法定义/user/:id这样的路由,但是可以通过queryString方式解决。
  3. 特殊的路由方式,可以在routes.js文件中定义

设计成webpack插件

插件名:RouteConfigGrabWebpackPlugin,路由配置抓取 路由抓取工具如果能设计成webpack,使用起来非常方便,提高通用性

安装

$ yarn add sx-route-config-grab-webpack-plugin -D

插件参数

参数 | 说明 | 类型 | 默认值 --- | --- | --- | --- mode | dirvariable ,路由抓取方式,dir:基于目录;variable:基于文件中变量export const PAGE_ROUTE = '/user'; | string | dir hyphen | 路由中的驼峰命名转换为连字符命名,UserList -> user-list | boolean | false codeSplitting | 是否使用代码分割 | boolean | true paths | 需要抓取的目录,一般是/path/to/pages/**/*.jsx | string or [string] | - pagePath | 页面文件所在目录,用于简化从文件路径中截取路由path字符串,比如pathPath = /path/to/src/pages,filePath = /path/to/src/pages/user/UserList.jsx,最终得到的路由path:/user/UserList | string | - ignored | 需要忽略的文件 | string or [string] | - output | 生成的路由文件输出文件 | string | - watch | 是否启用监听模式,一般开发模式下是true | boolen | - template | 路由文件生成模版,ejs文件,如果生成的路由文件不符合期望,可以自己通过模版生成文件内容 | string | - displayLog | 是否显示log信息 | boolean | false

默认template模版

codeSplitting = true:

// 此文件为生成文件,不要直接编辑
export default [<% for(let i = 0; i< result.length; i++){ %>
    {
        path: '<%= result[i].routePath%>',
        getComponent: () => import('<%= result[i].path %>'),
    },<% } %>
];

codeSplitting = false:

// 此文件为生成文件,不要直接编辑
<% for(let i = 0; i< result.length; i++){ %>import <%= `Component` + i %> from '<%= result[i].path%>';
<%}%>
export default [<% for(let i = 0; i< result.length; i++){ %>
    {
        path: '<%= result[i].routePath%>',
        component: <%= `Component` + i %>,
    },<% } %>
];

template模版文件能得到的数据

参数 | 说明 | 类型 | 默认值 --- | --- | --- | --- routePath | 路由使用的path | string | - path | 文件绝对路径 | string | - fileName | 不带扩展名的文件名 | string | - baseName | 含有扩展名的文件名 | string | - content | 文件内容 (mode === variable 时才有)| string | -

webpack插件用法

结合webpack进行使用

const path = require('path');

const RouteConfigGrabWebpackPlugin = require('sx-route-config-grab-webpack-plugin');

new RouteConfigGrabWebpackPlugin({
    mode: 'dir',
    // mode: 'variable',
    codeSplitting: false,
    paths: [
        path.resolve(__dirname, './src/pages/**/*.jsx'),
        path.resolve(__dirname, './src/pages2/**/*.jsx'),
        path.resolve(__dirname, './src/pages3/**/*.jsx'),
    ],
    pagePath: path.resolve(__dirname, './src/pages'),
    ignored: [],
    output: path.resolve(__dirname, './src/page-routes.js'),
    watch: true,
    // template,
});

非webpack插件方式使用

自定义脚本,而非webpack环境,可以通过如下方式使用:

const path = require('path');

const RouteConfigGrabWebpackPlugin = require('sx-route-config-grab-webpack-plugin');

const rcgwp = new RouteConfigGrabWebpackPlugin({
    mode: 'dir',
    // mode: 'variable',
    codeSplitting: false,
    paths: [
        path.resolve(__dirname, './src/pages/**/*.jsx'),
        path.resolve(__dirname, './src/pages2/**/*.jsx'),
        path.resolve(__dirname, './src/pages3/**/*.jsx'),
    ],
    pagePath: path.resolve(__dirname, './src/pages'),
    ignored: [],
    output: path.resolve(__dirname, './src/page-routes.js'),
    watch: true,
    // template,
});

rcgwp.routeConfigGrab();