日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

React全家桶环境搭建过程

發布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 React全家桶环境搭建过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境搭建

1.從零開始搭建webpack+react開發環境

2.引入Typescript

  • 安裝依賴
npm i -S @types/react @types/react-dom
npm i -D typescript awesome-typescript-loader source-map-loader
  • 新建tsconfig.json
{"compilerOptions": {"outDir": "./dist/","sourceMap": true,"noImplicitAny": true,"module": "commonjs","target": "es5","jsx": "react"},"include": ["./src/**/*"] }
  • 修改webpack.config.js
// webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const webpack = require('webpack');module.exports = {entry: {index:'./src/index.js',},output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},devtool: "source-map",// Add '.ts' and '.tsx' as resolvable extensions.resolve: {extensions: ['.ts', '.tsx', '.js', '.jsx']},module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']},{test: /\.(png|svg|jpg|gif)$/,use: ['url-loader']},{test: /\.(woff|woff2|eot|ttf|otf)$/,use: ['url-loader']},{test: /\.(js|jsx)$/,exclude: /node_modules/,use: {loader: 'babel-loader'}},// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.{test: /\.tsx?$/,loader: "awesome-typescript-loader"},]},plugins: [new HtmlWebpackPlugin({title: 'production',template: './index.html'}),new webpack.NamedModulesPlugin(),new webpack.HotModuleReplacementPlugin()],devServer: {contentBase: './dist',hot: true}, };

3.引入less并支持import less modules

  • 安裝依賴
npm i -D less less-loader
npm i -D typings-for-css-modules-loader

tips: typings-for-css-modules-loader

打包時將樣式模塊化,我們可以通過import或require引入樣式,并且相互不沖突。

//demo.less -> demo.less.d.ts //.demo{color:red;} -> export const demo: string; import * as styles from 'demo.less' <DemoComponent className={styles.demo} />
  • 修改webpack.config.js
// webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const webpack = require('webpack');module.exports = {entry: {index:'./src/index.js',},output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},devtool: "source-map",//add .lessresolve: {extensions: ['.ts', '.tsx', '.js', '.jsx', '.less', '.css']},module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']},//import less modules,name:demo__demo___hash{test: /\.less/,use: ['style-loader','typings-for-css-modules-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]&namedExport&camelCase&less!less-loader']},{test: /\.(png|svg|jpg|gif)$/,use: ['url-loader']},{test: /\.(woff|woff2|eot|ttf|otf)$/,use: ['url-loader']},{test: /\.(js|jsx)$/,exclude: /node_modules/,use: {loader: 'babel-loader'}},{test: /\.tsx?$/,loader: "awesome-typescript-loader"},]},plugins: [new HtmlWebpackPlugin({title: 'production',template: './index.html'}),new webpack.NamedModulesPlugin(),new webpack.HotModuleReplacementPlugin()],devServer: {contentBase: './dist',hot: true}, };

4.引入react-routerv4

npm i -S react-router-dom
  • 創建history
import { createHashHistory } from 'history'; export default createHashHistory();
  • 使用
import React from 'react'; import ReactDom from 'react-dom'; import * as styles from "./index.less"; import history from './helpers/history'; import {Router, Route, Switch, Redirect, Link} from 'react-router-dom'; import Hello from "./router/Hello"; import TodoList from "./router/TodoList";const PrivateRoute = ({ component: Component , ...rest}) => {return (<Route {...rest} render={props => (<Component {...props}/>)}/>); }ReactDom.render(<Router history={history} ><div className={styles.wrap}><ul><li><Link to="/">Homes</Link></li><li><Link to="/todo">TodoList</Link></li></ul><Switch><Route exact path="/" component={Hello}/>{/*<Route path="/demo" component={Demo}/>*/}<PrivateRoute path="/todo" component={TodoList} /></Switch></div></Router>,document.getElementById('root') );
  • ...ES7語法報錯
npm i -S babel-preset-stage-2

修改.babelrc

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

5.引入mobx狀態管理

npm i -S mobx mobx-react
  • 使用裝飾器語法

修改tsconfig.json

"compilerOptions": {"target":"es2017", //fix mobx.d.ts error"experimentalDecorators": true,"allowJs": true } npm i -D babel-plugin-transform-decorators-legacy

修改.babelrc

{"presets": ["es2015", "react", "stage-2"],"plugins": ["transform-decorators-legacy"] }

源碼

Github

總結

以上是生活随笔為你收集整理的React全家桶环境搭建过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 操操网站 | 美日毛片| 国产理论片 | 黄色激情网站 | 欧美三级免费观看 | 精品国产91乱码一区二区三区 | 91快射 | 干美女视频 | 色吧视频 | 欧美一区二区三区公司 | 天天摸日日 | 884aa四虎影成人精品一区 | 日韩在线黄色 | 欧美精品久久久 | 成人先锋av | 久久久成人精品视频 | 欧美成人看片黄a免费看 | 国产精品久久777777换脸 | 欧美福利视频在线观看 | www.久久色| 美日韩一区二区三区 | 欧美精品免费一区二区三区 | 日韩伦理一区二区 | 九九热在线免费观看 | 久久国内视频 | 男人资源网站 | 国产婷 | 97干在线视频 | 国产又粗又猛又爽 | www毛片| 爱情岛亚洲论坛入口 | 欧美一级专区 | 天堂资源 | 国产免费一区二区三区最新6 | 国模大胆一区二区三区 | 毛片网络 | 男同互操gay射视频在线看 | 精品无码国产污污污在线观看 | 99久久影院 | 天堂在线 | 九一国产在线观看 | 欧美日韩网址 | 阿娇全套94张未删图久久 | 亚洲第一欧美 | 中出亚洲 | 爱搞逼综合 | 实拍澡堂美女洗澡av | 日韩成人一区二区三区 | 在线观看欧美精品 | 中文字幕在线观看一区 | 操人视频免费 | 怡红院av亚洲一区二区三区h | 人人干狠狠干 | 免播放器av| 黄色特级毛片 | 老司机精品视频在线 | 性色欲网站人妻丰满中文久久不卡 | 久久久久久久久97 | 国产情侣自拍小视频 | 在线免费观看日韩视频 | 欧美激情一区二区 | 免费一级全黄少妇性色生活片 | 91亚洲精品久久久久久久久久久久 | 美女隐私无遮挡 | 精品日韩在线观看 | 成全影视在线观看第8季 | 一级片免费在线播放 | 中文字幕不卡一区 | 精品日韩一区二区三区 | 91精品国产91久久久久久久久久久久 | 污污小说在线观看 | 成人依依网| 精品动漫3d一区二区三区免费版 | 亚洲a在线观看 | 国产99视频在线 | 自拍偷拍亚洲一区 | 天天射狠狠干 | 久久精品av| 亚洲精品高潮久久久久久久 | www狠狠爱 | 日本大胆人体视频 | 雷电将军和丘丘人繁衍后代视频 | 91成品人影院| 国产免费a级片 | 国产精品久久久久久久久久久久午夜片 | 一级特黄av| 国产精品亚洲AV色欲三区不卡 | 中文字幕日产av | 午夜免费福利小电影 | 荫道bbwbbb高潮潮喷 | 无码人妻丰满熟妇啪啪网站 | 国产免费av片在线 | 一级片视频免费观看 | 欧美日韩亚洲一区 | www.黄色 | 成人一区二区三区 | 久久精品99国产精品日本 | 国产精久久 | 五月婷婷欧美 |