本文參考:Creating a React App… From Scratch.javascript
新建一個目錄,進入目錄css
執行npm init
命令初始化package.json
文件html
npm init -y
命令執行git init
命令初始化倉庫java
新建public
和src
文件夾node
public
用來存放項目中建立的靜態資源assets
和index.html
文件新建.gitignore
文件,上傳代碼時忽略node_modules
和dist
文件夾下的文件react
能夠在vscode
中選中須要忽略的文件或文件夾,右鍵選擇GIT:Ignore this file\folder
webpack
也能夠在.gitignore
文件中手動添加以下代碼,若是沒有生效,能夠重啓vscode
查看git
node_modules
dist
複製代碼
更多:【廖雪峯的官方網站】忽略特殊文件web
在public
目錄下添加index.html
文件,react用這個文件渲染應用程序npm
index.html
文件中內容以下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>React Starter</title>
</head>
<body>
<div id="root"></div>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<script src="../dist/bundle.js"></script>
</body>
</html>
複製代碼
<div id="root"></div>
是React app將要掛載的節點
<script src="../dist/bundle.js"></script>
,bundle.js
文件引用了構建好的應用程序
執行npm install --save-dev @babel/core@7.1.0 @babel/cli@7.1.0 @babel/preset-env@7.1.0 @babel/preset-react@7.0.0
命令
--save
和--save-dev
能夠自動將模塊和版本號添加到package.json
文件中的dependencies
或devDependencies
部分
babel-core
:babel的核心,如需任何轉碼都須要引入它
babel-cli
:命令行轉碼
babel-preset-env
:plugins的組合,將ES6轉換爲ES5等
babel-react:將react轉換成JSX
在項目根目錄下建立.babelrc
文件,添加presets
配置
{
"presets": ["@babel/env", "@babel/preset-react"]
}
複製代碼
更多:【簡書】你真的會用babel嗎?
執行npm install --save-dev webpack@4.19.1 webpack-cli@3.1.1 webpack-dev-server@3.1.8 style-loader@0.23.0 css-loader@1.0.0 babel-loader@8.0.2
在項目根目錄下建立webpack.config.js
文件,內容以下:
const path = require("path");
const webpack = require("webpack");
module.exports = {
entry: "./src/index.js",
mode: "development",
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules|bower_components)/,
loader: "babel-loader",
options: { presets: ["@babel/env"] }
},
{
test: /\.css$/,
use: ["style-loader", "css-loader"]
}
]
},
resolve: { extensions: ["*", ".js", ".jsx"] },
output: {
path: path.resolve(__dirname, "dist/"),
publicPath: "/dist/",
filename: "bundle.js"
},
devServer: {
contentBase: path.join(__dirname, "public/"),
port: 3000,
publicPath: "http://localhost:3000/dist/",
hotOnly: true
},
plugins: [new webpack.HotModuleReplacementPlugin()]
};
複製代碼
entry
指定打包的入口文件
mode
指定是development
環境仍是production
環境。腳手架沒有這一項,由於它區分了dev.conf.js
和prod.conf.js
module
用於配置loader
,loader
用於對模塊的源代碼進行轉換,能夠將文件從不一樣的語言(如 TypeScript
)轉換爲JavaScript
,或將內聯圖像轉換爲data URL
,以及加載CSS文件等
resolve
配置模塊如何解析
output
配置如何輸出、以及在哪裏輸出bundle
、asset
和其餘打包或使用 webpack
載入的任何內容
path
對應一個絕對路徑
publicPath
指定在瀏覽器中所引用的此輸出目錄對應的公開URL
devServer
指定影響webpack-dev-server
(簡寫爲devServer
)行爲的選項
contentBase
告訴服務器從哪一個目錄中提供內容,只有要提供靜態文件時才須要publicPath
配置的路徑下的打包文件能夠在瀏覽器中訪問,上述配置中可經過http://localhost:3000/dist/bundle.js
訪問bundle。bundle.js
對應的是output.filename
hotOnly
設置爲true
時表示容許使用模塊熱替換(Hot Module Replacement
)執行npm install --save-dev react@16.5.2 react-dom@16.5.2
命令
在src
目錄下新建index.js
文件,並添加以下代碼將React app掛載到index.html
文件的root節點上
import React from "react";
import ReactDOM from "react-dom";
import App from "./App.js";
ReactDOM.render(<App />, document.getElementById("root")); 複製代碼
在src
目錄下繼續建立另一個文件App.js
import React, { Component} from "react";
import "./App.css";
class App extends Component{
render(){
return(
<div className="App"> <h1> Hello, World! </h1> </div>
);
}
}
export default App;
複製代碼
建立App.css
文件
.App {
margin: 1rem;
font-family: Arial, Helvetica, sans-serif;
}
複製代碼
.
+-- public
| +-- index.html
+-- src
| +-- App.css
| +-- App.js
| +-- index.js
+-- .babelrc
+-- .gitignore
+-- package-lock.json
+-- package.json
+-- webpack.config.js
複製代碼
package.json
文件中的script
配置項中添加"start": "webpack-dev-server --mode development"語句
npm start
便可啓動webpack-dev-server
執行npm install --save-dev react-hot-loader@4.3.11
命令
在App.js
文件中導入react-hot-loader
並經過修改代碼將導出的對象標記爲熱加載,代碼以下:
import React, { Component} from "react";
import {hot} from "react-hot-loader";
import "./App.css";
class App extends Component{
render(){
return(
<div className="App"> <h1> Hello, World! </h1> </div>
);
}
}
export default hot(module)(App);
複製代碼
webpack-dev-server
其實是從內存中提供打包文件 —— 一旦服務器中止,打包文件就會消失。若是要實際構建文件,須要正確使用webpack——在package.json
的"script"
配置項中添加:"build":"webpack --mode development"
。