关于react.js:基于React脚手架搭建React-dvatypescript-webpack-less

1次阅读

共计 3240 个字符,预计需要花费 9 分钟才能阅读完成。

基于 React 脚手架搭建 React + dva + webpack + less

Mac

  1. react-create-app 创立 react 我的项目及 typescript,react-create-app 须要本人装置配置,不赘述
    npx create-react-app [app0729- 自定义文件名] --typescript
    执行yarn start 能够看到默认页面了~
  2. 裸露 webpack,即生成 webpack 配置等文件, config/script
    yarn eject
  3. 装置 dva
    yarn add dva
  4. 配置路由
    yarn add history

    • src 下创立 routes 文件夹,该文件夹内放各个页面,每个页面独自创立文件夹

    😊举个栗子~

    // home.tsx
    import {Link} from 'dva/router';
    import React from 'react';
    
    const Home = ({history}: any): JSX.Element => {
      return (
     <div className="home-wrapper">
       <h1>home</h1>
       <p onClick={() => {
         // history 跳转
         history.push('/orderList');
       }
       }> 去订单列表页 </p>
       // link 标签跳转
       <Link to={'/orderList'}> 去订单列表页 </Link> 
     </div>
      )
    }
    
    export default React.memo(Home);
    • 批改 src/app.tsx 文件 — 管制路由
import React from 'react';  

import {Router, Route, Switch} from 'dva/router';
import dynamic from 'dva/dynamic';

const routes = [
  {  
      key:'home',   
      path: '/',  
      component: () => import('./routes/Home/home'),  
  },
  {  
      key:'/orderList',   
      path: '/orderList',   
      component: () => import('./routes/Order/orderList/index'),  
  },
  {  
      key:'/orderDetail',   
      path: '/orderDetail',    
      component: () => import('./routes/Order/orderDetail/index'),  
  }
];

function RouterConfig({history, app}: any) {  
  
  return (<Router history={history}> 
        <Switch>  
        {routes.map((item: any): any => (  
              <Route  
                key={item.key}   
                path={item.path}   
                exact   
                // @ts-ignore
                component={dynamic({  
                  // @ts-ignore
                  app,  
                  models: item.models,
                  component: item.component,
                })}   
              />  
            ))  
        }
        </Switch>  
    </Router>  
  );  
}  
  
export default RouterConfig; 
  • 批改 src/index.tsx 文件 入口文件
import dva from 'dva';  
// import './index.css';  
import {createBrowserHistory} from 'history';
  
// 1. Initialize  
const app = dva({history:createBrowserHistory()
});  
  
// 2. Plugins  -- 能够挂载 loading 等插件
// app.use({});  
  
// 3. Model  -- 引入全局 model  可稍后尝试
// app.model(require('./models/app').default);  
  
// 4. Router  
app.router(require('./App.tsx').default);  
  

// 5. Start  -- 挂载到 #root DOM 上
app.start('#root');  

执行 yarn start 曾经能够看到页面内容了,能够点击跳转页面~

  1. 装置 less,react 脚手架自带的是 sass,如果想应用 sass 可间接装置

    • 执行yarn add --dev less less-loader,

    如果提醒 node 版本号谬误如less-loader@10.0.1: The engine "node" is incompatible with this module. Expected version ">= 12.13.0". Got "10.18.0", 可执行yarn add --dev less less-loader --ignore-engines, 疏忽 node 版本号即可。

    • webpack 配置 less
      -config/webpack.config.js 批改 lessRegex、lessModuleRegex 替换 sassRegex、sassModuleRegex
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/
// const sassRegex = /\.(scss|sass)$/;
// const sassModuleRegex = /\.module\.(scss|sass)$/;

            // Opt-in support for SASS (using .scss or .sass extensions).
            // By default we support SASS Modules with the
            // extensions .module.scss or .module.sass
            {
              test: lessRegex,  // 替换
              exclude: lessModuleRegex,  // 替换
              use: getStyleLoaders(
                {
                  importLoaders: 1,  // 替换
                  sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                    : isEnvDevelopment,
                },
                'less-loader' // 替换
              ),
              // Don't consider CSS imports dead code even if the
              // containing package claims to have no side effects.
              // Remove this when webpack adds a warning or an error for this.
              // See https://github.com/webpack/webpack/issues/6571
              sideEffects: true,
            },
            // Adds support for CSS Modules, but using SASS
            // using the extension .module.scss or .module.sass
            {
              test: lessModuleRegex,  // 替换
              use: getStyleLoaders(
                {
                  importLoaders: 1,  // 替换
                  sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                    : isEnvDevelopment,
                  modules: {getLocalIdent: getCSSModuleLocalIdent,},
                },
                'less-loader'  // 替换
              ),
            },

src/routes/Home 下创立 style.less 并在 home.tsx 文件内引入 import './style.less';, 重启服务。
如果呈现以下问题,阐明装置的 less-loader 版本过高,不反对 getOptions 办法,装置低版本即可,执行 yarn add --dev less-loader@7.0.0 即可(能够本人尝试哪个版本号可用)

再执行 yarn start 就能够启动服务了,此时 less 已可应用了
如果呈现 less 生成的款式的 class 名字都是 hash 命名,阐明上述配置中的 getStyleLoaders-modules 有问题,依照配置更改即可~

正文完
 0