初始化一个react项目

初始化React项目

初始化一个react项目

mkdir init_react
cd init_react
npm init //如果没有什么特殊的配置一路回车,得到package.json文件

目录结构

dist ---------------------------------------------> //用于存放webpack打包之后的项目文件

index.html ----------------------------------> //webpack打包之后的html文件

main.hash值.bundle.js ---------------------> //webpack打包之后的js文件

node_modules --------------------------------> //项目当中使用的第三方库文件存放目录

src ----------------------------------------------> //生产环境中代码存放目录

index.html ----------------------------------> //前端统一的html模版文件

index.js -------------------------------------> //项目的主入口文件

index.less -----------------------------------> //项目中的样式文件

.babelrc ----------------------------------------> //babel的配置文件

package.js

webpack.config.js -----------------------------> //webpack的配置文件

安装webpack打包工具和webpack-dev-server服务器

npm install webapck --save
npm install webpack-dev-server --save

安装react和react-dom

npm install react --save
npm install react-dom --save

安装babel

npm install babel-preset-es2015 babel-preset-react babel-preset-stage-0 babel-polyfill babel-core --save-dev

创建.babelrc文件,配置babel 预处理

{
   "presets": ["es2015","react","stage-0"]
}

处理样式需要安装less

npm install less --save

安装webpack 的 loader

npm install babel-loader style-loader css-loader less-loader --save-dev

安装webpack插件

npm install extract-text-webpack-plugin html-webpack-plugin --save-dev

创建webpack.config.js文件

var path = require('path')
var webpack = require('webpack')
var ExtractTextPlugin = require('extract-text-webpack-plugin')  
var HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    devtool:'eval', //source-map
    entry:{
        main:'./src/index.js'//入口文件
    },
    output:{
        path:path.join(__dirname, 'dist'),//出口文件
        filename: '[name].[hash:8].bundle.js'
    },
    resolve: {
        extensions: [' ', '.js','.jsx', '.json','.css','.less']
    },
    module:{
        rules: [{
            test: /\.less$/,//加载less样式的loader
            use: ExtractTextPlugin.extract({
                fallback: "style-loader",
                use: ['css-loader', 'less-loader']
            })
        }, {
            test: /\.js?$/,//用于解析es6语法的babel-loader
            exclude: /node_modules/,
            use: 'babel-loader'
        }]
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(), //热更新
        new webpack.NoEmitOnErrorsPlugin(), //错误不编译
        new ExtractTextPlugin('style.css'), //css模块独立
        new HtmlWebpackPlugin({
                title: 'Redux Practive', //标题
                // favicon: './src/assets/img/favicon.ico', //favicon路径
                filename: './index.html', //生成的html存放路径,相对于 path
                template: './src/index.html', //html模板路径
                inject: true, //允许插件修改哪些内容,包括head与body`
                minify: { //压缩HTML文件
                    removeComments: true, //移除HTML中的注释
                    collapseWhitespace: false //删除空白符与换行符
                }
        })
     ]
}

修改package.json

{
  "name": "init_react",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server --hot --inline --progress --colors --watch --compress --content-base ./dist  --port 8086 --host 0.0.0.0",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "less": "^2.7.2",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "webpack": "^3.3.0",
    "webpack-dev-server": "^2.6.1"
  },
  "devDependencies": {
    "babel-core": "^6.25.0",
    "babel-loader": "^7.1.1",
    "babel-polyfill": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "css-loader": "^0.28.4",
    "extract-text-webpack-plugin": "^3.0.0",
    "html-webpack-plugin": "^2.29.0",
    "less-loader": "^4.0.5",
    "style-loader": "^0.18.2"
  }
}

创建html模版文件

在项目的根目录下创建src目录并创建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="root"></div>
</body>
</html>

在src目录下创建index.js

import React from 'react'
import ReactDOM from 'react-dom'
ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
)
### 初始化项目结构 要初始化一个包含 React Router、Redux 和 Ant Design 的 React 项目,可以按照以下步骤进行配置。 #### 创建 React 项目 首先使用 `create-react-app` 创建一个新的 React 项目。确保你已经安装了 Node.js 和 npm。 ```bash npx create-react-app my-app cd my-app ``` #### 安装 React Router React Router 是用于实现单页应用(SPA)路由管理的库。可以通过以下命令安装: ```bash npm install react-router-dom ``` 在 `index.js` 或 `App.js` 中引入并使用 `BrowserRouter` 组件包裹你的应用根组件: ```jsx import React from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <BrowserRouter> <App /> </BrowserRouter> </React.StrictMode> ); ``` #### 安装 Redux 和相关依赖 为了使用 Redux 管理状态,需要安装 `redux` 和 `react-redux` 库,并推荐使用 `@reduxjs/toolkit` 来简化 Redux 配置。 ```bash npm install redux react-redux @reduxjs/toolkit ``` 创建 Redux Store 并将其提供给整个应用。在项目中创建一个 `store.js` 文件: ```javascript // store.js import { configureStore } from '@reduxjs/toolkit'; const store = configureStore({ reducer: { // 在这里添加你的 reducers }, }); export default store; ``` 然后,在 `index.js` 中将 Store 提供给 React 应用: ```jsx import React from 'react'; import ReactDOM from 'react-dom/client'; import { Provider } from 'react-redux'; import { BrowserRouter } from 'react-router-dom'; import store from './store'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <Provider store={store}> <BrowserRouter> <App /> </BrowserRouter> </Provider> </React.StrictMode> ); ``` #### 安装和配置 Ant Design Ant Design 是一个企业级 UI 设计语言和 React 组件库,可以通过以下命令安装: ```bash npm install antd ``` 为了按需加载样式并提高性能,建议使用 `babel-plugin-import` 插件来按需加载 Ant Design 的样式文件。 ```bash npm install babel-plugin-import --save-dev ``` 修改 `babel.config.js` 或 `.babelrc` 文件以启用按需加载功能: ```javascript module.exports = { presets: ['react-app'], plugins: [ [ 'import', { libraryName: 'antd', style: 'css' }, // 或者使用 'less' 以支持自定义主题 ], ], }; ``` 如果希望使用 Less 自定义主题,则还需要安装 `less` 和 `less-loader`: ```bash npm install less less-loader --save-dev ``` 并在 Webpack 配置中(如果你有 eject 出来)或通过 `craco` 工具配置相应的 loader 规则。 #### 菜单生成与角色权限控制 根据用户的角色动态生成菜单是一个常见的需求。可以参考以下代码片段来实现基于角色的菜单过滤: ```jsx import React from 'react'; import { Menu } from 'antd'; import { Link } from 'react-router-dom'; function filterRoutes(routes, role) { return routes.filter(route => route.roles.includes(role)); } function AppMenu({ routes, role }) { const allowedRoutes = filterRoutes(routes, role); return ( <Menu mode="inline"> {allowedRoutes.map(route => ( <Menu.Item key={route.path}> <Link to={route.path}>{route.name}</Link> </Menu.Item> ))} </Menu> ); } ``` #### 环境变量配置 对于不同的环境(如开发环境和生产环境),可以通过 `.env` 文件设置环境变量。例如,在项目根目录下创建 `.env` 文件并添加如下内容: ``` # .env REACT_APP_PRODUCTION_API_URL=http://xxx.com/api REACT_APP_DEVELOPMENT_API_URL=http://localhost/api ``` 这些变量可以在应用程序中通过 `process.env.REACT_APP_*` 访问。 ### 总结 以上步骤详细介绍了如何初始化一个包含 React Router、Redux 和 Ant Design 的 React 项目。从创建基础项目到集成必要的库,再到配置环境变量和实现基于角色的菜单过滤逻辑,每一步都提供了具体的示例代码和技术说明。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值