摘要:建立項(xiàng)目首先,創(chuàng)建工程目錄現(xiàn)在我們已經(jīng)創(chuàng)建了我們要開(kāi)發(fā)應(yīng)用程序的文件夾,接著需要添加一個(gè)文件。這里為了版本的一致性,我把里的版本號(hào)前面刪除了。為此,需要?jiǎng)?chuàng)建一個(gè)名為的文件,用來(lái)配置。
想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你!
在過(guò)去的一年和一些人中,我一直在與 Creative Tim 合作。 我一直在使用 create-react-app 來(lái)開(kāi)發(fā)一些不錯(cuò)的產(chǎn)品。 有很多客戶(hù)詢(xún)問(wèn)如何在 Webpack 上遷移我們的產(chǎn)品模板。
在多次要求求之后,我們寫(xiě)了這個(gè)關(guān)于如何開(kāi)始使用 React with Webpack 4和 Babel 7 的小教程。在本教程的最后,將向大家展示如何在新創(chuàng)建的應(yīng)用程序上添加 Material Dashboard React。
在我們開(kāi)始之前,請(qǐng)確保你的電腦上安裝了 npm 和 Nodejs 的最新版本。在撰寫(xiě)本文時(shí),我的電腦上的最新版本是 npm 的 6.4.1 和 Nodejs 的 8.12.0 (lts)。
建立項(xiàng)目首先,創(chuàng)建工程目錄:
mkdir react-webpack-babel-tutorial cd react-webpack-babel-tutorial
現(xiàn)在我們已經(jīng)創(chuàng)建了我們要開(kāi)發(fā)應(yīng)用程序的文件夾,接著需要添加一個(gè) package.json 文件。 有兩種創(chuàng)建方式,你可以選擇其中的一種:
1.只需創(chuàng)建 package.json 文件,無(wú)需任何其他配置:
npm init -y
如下所示,package.json 文件已創(chuàng)建,其中包含一些非常基本的信息。
2.使用一些額外的配置設(shè)置創(chuàng)建 package.json 文件
npm init
我在我們新創(chuàng)建的 package.json 文件中添加了一些東西,比如一些很好的 keywords,一個(gè)repo等等...
之后,在根目錄下創(chuàng)建 src 文件夾,然后在 src 下分別創(chuàng)建 index.html 和 index.js.
1.Linux / MacOS 命令
mkdir src touch src/index.html touch src/index.js
2.Windows 命令
mkdir src echo "" > srcindex.html echo "" > srcindex.js
創(chuàng)建完后在 index.html 添加以下內(nèi)容。
React Tutorial
接著在 index.js 中添加一些內(nèi)容,目前只是為了展示一些內(nèi)容,下面繼續(xù)完善。
(function () { console.log("hey mister"); }());
此時(shí),目錄結(jié)構(gòu)如下:
將 Webpack 添加到項(xiàng)目中安裝 Webapck 及所需的開(kāi)發(fā)環(huán)境依賴(lài)模塊。
npm install --save-dev webpack webpack-cli webpack-dev-server
webpack
用來(lái)配置我們的新應(yīng)用
本文所用的版本是 4.19.0
webpack-cli
可以在命令行中使用 Webpack 了
本文所用的版本是 3.1.0
webpack-dev-server
這樣,當(dāng)我們對(duì)新應(yīng)用程序中的文件進(jìn)行更改時(shí),就不需要刷新頁(yè)面了。每當(dāng)我們?cè)趹?yīng)用程序中更改文件時(shí),它會(huì)自動(dòng)刷新瀏覽器頁(yè)面
本文所用的版本是 3.1.8
看一下package.json文件,將看到這三個(gè)包被添加到這個(gè)文件中,如下所示:
"devDependencies": { "webpack": "^4.19.0", "webpack-cli": "^3.1.0", "webpack-dev-server": "^3.1.8" }
補(bǔ)充說(shuō)明一下版本號(hào)前的 ^,~ 的區(qū)別
指定版本:比如"webpack": "4.19.0",表示安裝 4.19.0 的版本
波浪號(hào) ~ 指定版本:比如 "webpack-cl": "~3.1.0",表示安裝 3.1.0 的最新版本(不低于1.1.0),但是不安裝 1.2.x,也就是說(shuō)安裝時(shí)不改變大版本號(hào)和次要版本號(hào)
^ 指定版本:比如 "webpack-dev-server": "^3.1.8",,表示安裝 請(qǐng)輸入代碼3.1.4 及以上的版本,但是不安裝4.0.0,也就是說(shuō)安裝時(shí)不改變大版本號(hào)。
package.json 文件只能鎖定大版本,也就是版本號(hào)的第一位,并不能鎖定后面的小版本,你每次 npm install 都是拉取的該大版本下的最新的版本,為了穩(wěn)定性考慮我們幾乎是不敢隨意升級(jí)依賴(lài)包的,這將導(dǎo)致多出來(lái)很多工作量,測(cè)試/適配等,所以 package-lock.json 文件出來(lái)了,當(dāng)你每次安裝一個(gè)依賴(lài)的時(shí)候就鎖定在你安裝的這個(gè)版本。
所以當(dāng)我們 npm install 安裝完插件后,都會(huì)生成兩個(gè)文件一個(gè)是 node_modules 和 package-lock.json 。
這里為了版本的一致性,我把 package.json 里的 版本號(hào)前面 ^ 刪除了。
接著新建 Webpack 配置文件 webpack.config.js:
1.Linux/MacOS 命令
touch webpack.config.js
2.Windows 命令
echo "" > webpack.config.js
如果你不想使用命令行,也可以簡(jiǎn)單地手動(dòng)創(chuàng)建文件。
在開(kāi)始處理 Webpack 配置文件之前,先在應(yīng)用程序中安裝一些我們需要的東西。
首先安裝 path 作為開(kāi)發(fā)環(huán)境的路徑依賴(lài)。
npm install --save-dev path
此外,由于不想在 HTML 中手動(dòng)注入 index.js 文件,因此需要安裝 html-webpack-plugin 的插件。 此插件通過(guò)配置在 HTML 文件中注入 index.js,無(wú)需手動(dòng)操作。
npm install --save-dev html-webpack-plugin
再次,我將 package.json 文件刪除所有 ^。
安裝完后在 package.json 文件中的 scripts 屬性里添加以為內(nèi)容:
"webpack": "webpack", "start": "webpack-dev-server --open"
現(xiàn)在 package.json 內(nèi)容如下:
{ "name": "react-webpack-babel-tutorial", "version": "1.0.0", "description": "This is a Tutorial to showcase the usage of React with Webpack and Babel", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1", "webpack": "webpack", "start": "webpack-dev-server --open" }, "repository": { "type": "git", "url": "git+https://github.com/creativetimofficial/react-webpack-babel-tutorial.git" }, "keywords": [ "react", "webpack", "babel", "creative-tim", "material-design" ], "author": "Creative Tim(https://www.creative-tim.com/)", "license": "MIT", "bugs": { "url": "https://github.com/creativetimofficial/react-webpack-babel-tutorial/issues" }, "homepage": "https://github.com/creativetimofficial/react-webpack-babel-tutorial#readme", "devDependencies": { "html-webpack-plugin": "3.2.0", "path": "0.12.7", "webpack": "4.19.0", "webpack-cli": "3.1.0", "webpack-dev-server": "3.1.8" } }
接著運(yùn)行以下命令,看看會(huì)發(fā)生什么:
npm run webpack
Webpack 將自動(dòng)獲取 src/index.js 文件,編譯它,并將其輸出到 dist/main.js 中,并壓縮代碼。這是因?yàn)槲覀冞€沒(méi)有配置 Webpack 配置文件。此外,由于我們還沒(méi)有配置該文件,我控制臺(tái)中將出現(xiàn)一些警告。
如果我們運(yùn)行如下命令:
npm start
webpack-dev-server 將自動(dòng)啟動(dòng)服務(wù)器并使用該服務(wù)器打開(kāi)默認(rèn)瀏覽器。但是,由于我們沒(méi)有配置webpack.config.js 文件,所以頁(yè)面展示并不是我們想要的內(nèi)容。
如果想停止服務(wù),只需在命令行中同時(shí)按下 CTRL + C 鍵。
接著在 webpack.config.js 添加以下內(nèi)容:
const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); module.exports = { entry: path.join(__dirname,"src","index.js"), output: { path: path.join(__dirname,"build"), filename: "index.bundle.js" }, mode: process.env.NODE_ENV || "development", resolve: { modules: [path.resolve(__dirname, "src"), "node_modules"] }, devServer: { contentBase: path.join(__dirname,"src") }, plugins: [ new HtmlWebpackPlugin({ template: path.join(__dirname,"src","index.html") }) ] };1.entry
entry 可以是個(gè)字符串或數(shù)組或者是對(duì)象。 當(dāng) entry 是個(gè)字符串的時(shí)候,用來(lái)定義入口文件:
entry: "./js/main.js"
當(dāng) entry 是個(gè)數(shù)組的時(shí)候,里面同樣包含入口js文件,另外一個(gè)參數(shù)可以是用來(lái)配置webpack提供的一個(gè)靜態(tài)資源服務(wù)器,webpack-dev-server。webpack-dev-server 會(huì)監(jiān)控項(xiàng)目中每一個(gè)文件的變化,實(shí)時(shí)的進(jìn)行構(gòu)建,并且自動(dòng)刷新頁(yè)面:
entry: [ "webpack/hot/only-dev-server", "./js/app.js" ]
當(dāng) entry 是個(gè)對(duì)象的時(shí)候,我們可以將不同的文件構(gòu)建成不同的文件,按需使用,比如在我的 hello 頁(yè)面中只要 引入 hello.js 即可:
entry: { hello: "./js/hello.js", form: "./js/form.js" }2.output
output 參數(shù)是個(gè)對(duì)象,用于定義構(gòu)建后的文件的輸出。其中包含 path 和 filename:
output: { path: "./build", filename: "bundle.js" }3.mode
這是輸出的模式,這里將其 mode 設(shè)置為 “development”。如果在腳本中指定 NODE_ENV 變量,那么它將使用這個(gè)變量。請(qǐng)參閱下面關(guān)于如何使用 NODE_ENV 的示例(請(qǐng)注意,本教程中的 package.json 文件中不會(huì)進(jìn)行以下更改,這只是一個(gè)示例,可以看到它是如何工作的)
"webpack": "NODE_ENV=production webpack",4.resolve
webpack 在構(gòu)建包的時(shí)候會(huì)按目錄的進(jìn)行文件的查找,resolve 屬性中的 extensions 數(shù)組中用于配置程序可以自行補(bǔ)全哪些文件后綴:
resolve:{ extensions:["",".js",".json"] }5.devServer
這告訴 webpack-dev-server 需要提供哪些文件。 這里是 src 文件夾中的所有內(nèi)容都需要在瀏覽器中瀏覽。
6.plugins在這里,我們?cè)O(shè)置了我們的應(yīng)用程序中需要的插件。到目前為止,只需要 html-webpack-plugin,它告訴服務(wù)器 index.bundl.js 應(yīng)該被注入到 index.html 文件中
再次運(yùn)行以下命令,顯示會(huì)跟上一次不同:
npm run webpack
webpack-dev-server 從 src 文件夾中讀取所有內(nèi)容并輸出到我們的瀏覽器中。
配置 React,Babel 與 styles loaders通過(guò)運(yùn)行以下命令來(lái)引入 React :
npm i react react-dom --save-dev
在我們的開(kāi)發(fā)過(guò)程中,如果我們?cè)?JS 文件中添加React代碼,Webpack 會(huì)給我們一個(gè)錯(cuò)誤,它不知道如何在bundle.js 文件中編譯 React。
修改 index.js 內(nèi)容如下:
import React from "react"; import ReactDOM from "react-dom"; let HelloWorld = () => { returnHello there World!
} ReactDOM.render(, document.getElementById("root") );
再次運(yùn)行以下命令:
npm start
錯(cuò)誤如下:
所以這就是 Babel 出現(xiàn)的原因, Babel 將告訴 Webpack 如何編譯 React 代碼。
安裝 Babel 相關(guān)依賴(lài):
npm install --save-dev @babel/core @babel/node @babel/preset-env @babel/preset-react babel-loader@babel/core
這是將ES6及以上版本編譯成ES5
@babel/nodebabel-node 是 babel-cli 的一部分,它不需要多帶帶安裝。
它的作用是在 node 環(huán)境中,直接運(yùn)行 es2015 的代碼,而不需要額外進(jìn)行轉(zhuǎn)碼。例如我們有一個(gè) js 文件以 es2015 的語(yǔ)法進(jìn)行編寫(xiě)(如使用了箭頭函數(shù))。我們可以直接使用 babel-node es2015.js 進(jìn)行執(zhí)行,而不用再進(jìn)行轉(zhuǎn)碼了。
可以說(shuō):babel-node = babel-polyfill + babel-register
@babel/preset-react這個(gè)是把 React 代碼編譯成 ES5 代碼。
babel-loader和 babel-cli 一樣,babel-loader 也會(huì)讀取 .babelrc 或者 package.json 中的 babel 段作為自己的配置,之后的內(nèi)核處理也是相同。唯一比 babel-cli 復(fù)雜的是,它需要和 webpack 交互,因此需要在 webpack 這邊進(jìn)行配置。比較常見(jiàn)的如下:
module: { rules: [ { test: /.js$/, exclude: /(node_modules|bower_components)/, loader: "babel-loader" } ] }
如果想在這里傳入 babel 的配置項(xiàng),也可以把改成:
// loader: "babel-loader" 改成如下: use: { loader: "babel-loader", options: { // 配置項(xiàng)在這里 } }
我們需要為項(xiàng)目中添加一些樣式,此時(shí)就需要使用樣式相關(guān)的加載器,這邊使用 scss,安裝命令如下:
npm install --save-dev style-loader css-loader sass-loader node-sassstyle-loader
通過(guò)注入 標(biāo)簽將 CSS 添加到 DOM 中
css-loadercss-loader用于將 css 文件打包到j(luò)s中, 常常配合 style-loader 一起使用,將 css 文件打包并插入到頁(yè)面中
sass-loader加載 SASS/SCSS 文件
node-sass將 SCSS 文件編譯為 CSS 文件
在 src 下創(chuàng)建 scss 文件:
1.Linux/MacOS 命令
touch src/index.scss
2.window 命令
echo "" > src/index.scss
并添加以下內(nèi)容:
body { div#root{ background-color: #222; color: #8EE4AF; } }
接著導(dǎo)入 index.js 中
import React from "react"; import ReactDOM from "react-dom"; // this line is new // we now have some nice styles on our react app import "index.scss"; let HelloWorld = () => { returnHello there World!
} ReactDOM.render(, document.getElementById("root") );
記得刪除 package.json 中的 ^ 號(hào),內(nèi)容如下:
{ "name": "react-webpack-babel-tutorial", "version": "1.0.0", "description": "This is a Tutorial to showcase the usage of React with Webpack and Babel", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1", "webpack": "webpack", "start": "webpack-dev-server --open" }, "repository": { "type": "git", "url": "git+https://github.com/creativetimofficial/react-webpack-babel-tutorial.git" }, "keywords": [ "react", "webpack", "babel", "creative-tim", "material-design" ], "author": "Creative Tim(https://www.creative-tim.com/)", "license": "MIT", "bugs": { "url": "https://github.com/creativetimofficial/react-webpack-babel-tutorial/issues" }, "homepage": "https://github.com/creativetimofficial/react-webpack-babel-tutorial#readme", "devDependencies": { "@babel/core": "7.0.1", "@babel/node": "7.0.0", "@babel/preset-env": "7.0.0", "@babel/preset-react": "7.0.0", "babel-loader": "8.0.2", "css-loader": "1.0.0", "html-webpack-plugin": "3.2.0", "node-sass": "4.9.3", "path": "0.12.7", "sass-loader": "7.1.0", "style-loa der": "0.23.0", "webpack": "4.19.0", "webpack-cli": "3.1.0", "webpack-dev-server": "3.1.8" }, "dependencies": { "react": "16.5.1", "react-dom": "16.5.1" } }
如果我們?cè)俅芜\(yùn)行上述任何命令,錯(cuò)誤仍將存在。 我們還沒(méi)有告訴 Webpack 它應(yīng)該使用 Babel 和樣式加載器來(lái)編譯我們的 React 和 SCSS 代碼。
接下來(lái)要做的是為 Babel 添加配置文件。 為此,需要?jiǎng)?chuàng)建一個(gè)名為 .babelrc 的文件,用來(lái)配置 Babel。
可以直接在 webpack.config.js 文件中添加 Babel 的配置。 為此,你可以查看官方的 babel-loader 文檔。 就我而言,我認(rèn)為最好將 Babel 配置放在自己的文件中,這樣就不會(huì)使 Webpack 配置過(guò)于復(fù)雜難讀。
在根目錄下創(chuàng)建 .babelrc
1.Linux/MacOS 命令
touch .babelrc
2.Windows 命令
echo "" > .babelrc
并在 .babelrc 中添加以下代碼,這樣 babel-loader 就會(huì)知道用什么來(lái)編譯代碼:
{ "presets": [ "@babel/env", "@babel/react" ] }
完成這些步驟后,我們需要在項(xiàng)目中添加一些內(nèi)容,以便我們可以導(dǎo)入各種文件,如圖像。 還需要添加一個(gè)插件,讓我們可以使用類(lèi)等等。 讓我們?cè)陬?lèi)中添加類(lèi)屬性,基本上,它將讓我們能夠使用 面向?qū)ο缶幊?/strong> 方式來(lái)編寫(xiě)代碼。
因此,讓我們將 webpack.config.js 更改為以下內(nèi)容(我也添加了一些注釋?zhuān)赡軙?huì)對(duì)你有所幫助):
// old // const path = require("path"); // const HtmlWebpackPlugin = require("html-webpack-plugin"); // new import path from "path"; import HtmlWebpackPlugin from "html-webpack-plugin"; module.exports = { entry: path.join(__dirname,"src","index.js"), output: { path: path.join(__dirname,"build"), filename: "index.bundle.js" }, mode: process.env.NODE_ENV || "development", resolve: { modules: [path.resolve(__dirname, "src"), "node_modules"] }, devServer: { contentBase: path.join(__dirname,"src") }, module: { rules: [ { // 這樣我們就可以將React、ES6及以上的任何內(nèi)容編譯成正常的ES5語(yǔ)法 test: /.(js|jsx)$/, // 不希望編譯node_modules中的任何內(nèi)容 exclude: /node_modules/, use: ["babel-loader"] }, { test: /.(css|scss)$/, use: [ "style-loader", // creates style nodes from JS strings "css-loader", // translates CSS into CommonJS "sass-loader" // compiles Sass to CSS, using Node Sass by default ] }, { test: /.(jpg|jpeg|png|gif|mp3|svg)$/, loaders: ["file-loader"] } ] }, plugins: [ new HtmlWebpackPlugin({ template: path.join(__dirname,"src","index.html") }) ] };
我們需要對(duì) package.json 文件做一個(gè)更改。我們需要告訴我們的腳本在 Webpack 的配置文件中,使用 import 而不是 require 語(yǔ)句。 否則它會(huì)給我們一個(gè)錯(cuò)誤,它不知道import 表示什么。
{ "name": "react-webpack-babel-tutorial", "version": "1.0.0", "description": "This is a Tutorial to showcase the usage of React with Webpack and Babel", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1", "webpack": "babel-node ./node_modules/webpack/bin/webpack", "start": "babel-node ./node_modules/webpack-dev-server/bin/webpack-dev-server --open" }, "repository": { "type": "git", "url": "git+https://github.com/creativetimofficial/react-webpack-babel-tutorial.git" }, "keywords": [ "react", "webpack", "babel", "creative-tim", "material-design" ], "author": "Creative Tim(https://www.creative-tim.com/)", "license": "MIT", "bugs": { "url": "https://github.com/creativetimofficial/react-webpack-babel-tutorial/issues" }, "homepage": "https://github.com/creativetimofficial/react-webpack-babel-tutorial#readme", "devDependencies": { "@babel/core": "7.0.1", "@babel/node": "7.0.0", "@babel/plugin-proposal-class-properties": "7.0.0", "@babel/preset-env": "7.0.0", "@babel/preset-react": "7.0.0", "babel-loader": "8.0.2", "css-loader": "1.0.0", "file-loader": "2.0.0", "html-webpack-plugin": "3.2.0", "node-sass": "4.9.3", "path": "0.12.7", "sass-loader": "7.1.0", "style-loader": "0.23.0", "webpack": "4.19.0", "webpack-cli": "3.1.0", "webpack-dev-server": "3.1.8" }, "dependencies": { "react": "16.5.1", "react-dom": "16.5.1" } }
我們還需要在 .babelrc 文件中添加 @babel/plugin-proposal-class 屬性,Babel將會(huì)知道如何處理類(lèi)屬性。
{ "presets": [ "@babel/env", "@babel/react" ], "plugins": [ "@babel/plugin-proposal-class-properties" ] }
現(xiàn)在總算配置完成了。再次運(yùn)行上述任何一個(gè)命令,就可以順利跑起來(lái)啦。
npm run webpack
npm start使用 Webpack 和 Babel 項(xiàng)目將 Material Design 加到我們的新 React 項(xiàng)目中
正如在這篇文章的開(kāi)頭講的,我們不會(huì)講 Material Design 樣式如何寫(xiě),這需要大量的工作。
相反,這里添加一個(gè)很好的產(chǎn)品來(lái)實(shí)現(xiàn) Google 的 Material Design,其中包括Creative Tim 員工的一些小改動(dòng)。 我們將向其添加 Material Dashboard React。
首先從 github 上把項(xiàng)目拷貝下來(lái):
git clone https://github.com/creativetimofficial/material-dashboard-react.git
Download from Github
好的,現(xiàn)在我們有兩個(gè)項(xiàng)目 - Material Dashboard React 和 我們剛創(chuàng)建的項(xiàng)目。
現(xiàn)在,我們不能簡(jiǎn)單地將 src 文件夾從 Material Dashboard React 復(fù)制到我們的新項(xiàng)目中。 這會(huì)給我們帶來(lái)很多錯(cuò)誤, 如缺少依賴(lài)關(guān)系的錯(cuò)誤,找不到模塊等。
因此,我建議首先將 Material Dashboard React 的 package.json 中的依賴(lài)項(xiàng)添加到 package.json 中。 我們不需要 Material Dashboard React 包中的所有依賴(lài)項(xiàng),因?yàn)槲覀兪褂?Webpack 構(gòu)建了自己的服務(wù)器。 除了產(chǎn)品本身,我們還添加了其他樣式加載器。
所以說(shuō),我們需要如下:
npm install --save @material-ui/core@3.1.0 @material-ui/icons@3.0.1 @types/googlemaps@3.30.11 @types/markerclustererplus@2.1.33 chartist@0.10.1 classnames@2.2.6 perfect-scrollbar@1.4.0 react-chartist@0.13.1 react-google-maps@9.4.5 react-router-dom@4.3.1 react-swipeable-views@0.12.15
我們不會(huì)全部都講,你可以在 npmjs.com 上找到它們的詳細(xì)信息和它們自己的文檔。
再一次,進(jìn)入 package.json 文件并從我們剛剛安裝的安裝包中刪除(^)。
接著拷貝 Material Dashboard React src 下的所有文件到我們項(xiàng)目 src 下
好了,差不多做完了,我們拷貝 Material Dashboard React 下的 src文件中所有內(nèi)容到我們項(xiàng)目 src 下,并覆蓋 index.js 文件。但是要保留 index.html 文件。
拷貝前
拷貝后
現(xiàn)在需要在 index.html 中添加一些樣式和字體,如下:
React Tutorial
還有一個(gè)小問(wèn)題。 當(dāng)我們刷新頁(yè)面時(shí),有一個(gè)錯(cuò)誤 Cannot GET/dashboard。 如果我們跳轉(zhuǎn)到另一個(gè)頁(yè)面,會(huì)得到如, Cannot GET /user錯(cuò)誤等 。 所以根本上,我們的路由不起作用,需要在 src/index.js 或 webpack.config.js 中進(jìn)行一些更改。
這里選擇使用第一個(gè)方案,因?yàn)樗浅:?jiǎn)單易懂。
我們?cè)谛聦?dǎo)航方式在 index.js 更改 history,使用 createHashHistory() 替換 createBrowserHistory()。
這將允許我們刷新頁(yè)面而不會(huì)出現(xiàn)任何其他錯(cuò)誤,現(xiàn)在我們完成了。
import React from "react"; import ReactDOM from "react-dom"; import { createHashHistory } from "history"; import { Router, Route, Switch } from "react-router-dom"; import "assets/css/material-dashboard-react.css?v=1.5.0"; import indexRoutes from "routes/index.jsx"; const hist = createHashHistory(); ReactDOM.render(, document.getElementById("root") ); {indexRoutes.map((prop, key) => { return ; })}
原文:
https://medium.freecodecamp.o...
你的點(diǎn)贊是我持續(xù)分享好東西的動(dòng)力,歡迎點(diǎn)贊!
歡迎加入前端大家庭,里面會(huì)經(jīng)常分享一些技術(shù)資源。文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101812.html
摘要:配置方式找到文件如需添加路由則在里面添加,同時(shí)需要后端更改配置除了上面的路徑,其他路徑全部指向單頁(yè)應(yīng)用多路由預(yù)渲染指南使用說(shuō)明源碼為方便快速構(gòu)建項(xiàng)目,本例所有配置的代碼均放在項(xiàng)目中。 寫(xiě)在前面 每次構(gòu)建react項(xiàng)目的時(shí)候都會(huì)配置一大堆東西,時(shí)間久了就會(huì)忘記怎么配置。為了方便自己記憶也為了其他開(kāi)發(fā)者在構(gòu)建react應(yīng)用時(shí)能夠快速開(kāi)發(fā),故作此記錄。 本項(xiàng)目基于 create-react-...
摘要:原文地址原文作者譯者校對(duì)者和其他人有一些關(guān)于比較好的博文,跟隨這些博文,我最近開(kāi)始使用。今天,我將展示如何從零開(kāi)始建立一個(gè)工程,以及如何使用管理構(gòu)建過(guò)程。我也將陳述關(guān)于的第一印象,尤其是使用和。 原文地址:Getting started with TypeScript and React 原文作者:Jack_Franklin 譯者:luxj 校對(duì)者:veizz Tom Dale...
摘要:優(yōu)化代碼拆分從入口文件開(kāi)始,遞歸地構(gòu)建了整個(gè)應(yīng)用的模塊依賴(lài)圖表,然后通常會(huì)將所有的模塊打包成一個(gè)。 如果你還不知道什么是React,請(qǐng)點(diǎn)擊這里github源碼 安裝Node.js 如果你還不知道什么是ECMAScript,請(qǐng)點(diǎn)擊這里 如果你還不知道什么是Node.js,請(qǐng)點(diǎn)擊這里 下載Node.js并安裝;接著打開(kāi)windows命令行窗口分別輸入node -v及npm -v如下圖所示,...
摘要:和類(lèi)似的預(yù)處理器還有等。的用處非常多,包括給自動(dòng)加前綴使用下一代語(yǔ)法等,目前越來(lái)越多的人開(kāi)始用它,它很可能會(huì)成為預(yù)處理器的最終贏家。 webpack實(shí)戰(zhàn) 查看所有文檔頁(yè)面:全棧開(kāi)發(fā),獲取更多信息。快馬加鞭,加班加點(diǎn),終于把這個(gè)文檔整理出來(lái)了,順便深入地學(xué)習(xí)一番,鞏固知識(shí),就是太累人,影響睡眠時(shí)間和質(zhì)量。極客就是想要把事情做到極致,開(kāi)始了就必須到達(dá)終點(diǎn)。 原文鏈接:webpack實(shí)戰(zhàn),原...
摘要:構(gòu)建構(gòu)建就是把源代碼轉(zhuǎn)換成發(fā)布到線(xiàn)上的可執(zhí)行代碼,包括如下內(nèi)容。自動(dòng)刷新監(jiān)聽(tīng)本地源代碼的變化,自動(dòng)重新構(gòu)建刷新瀏覽器。自動(dòng)發(fā)布更新完代碼后,自動(dòng)構(gòu)建出線(xiàn)上發(fā)布代碼并傳輸給發(fā)布系統(tǒng)。將文件放入到項(xiàng)目中,在中新建一個(gè)放字體圖標(biāo)的文件夾。 項(xiàng)目地址 github.com/wudiufo/Web… 知識(shí)點(diǎn)概覽: Loader,HMR ,Create React App, Caching, Plug...
閱讀 3133·2021-11-15 18:14
閱讀 1786·2021-09-22 10:51
閱讀 3301·2021-09-09 09:34
閱讀 3516·2021-09-06 15:02
閱讀 1035·2021-09-01 11:40
閱讀 3195·2019-08-30 13:58
閱讀 2535·2019-08-30 11:04
閱讀 1090·2019-08-28 18:31