react項目_如何從零開始創建React項目(三種方式)

在開發React項目前最關鍵的當然是項目的創建,現在的前端工程化使得前端項目的創建也變得越來越復雜,在這里介紹三種從零開始創建React項目的方式,分別是在瀏覽器中直接引入、使用官方腳手架create-react-app、使用Webpack創建。

瀏覽器中通過標簽直接引入

React框架有兩個核心的包,分別是react以及react-dom,如何想直接在瀏覽器中使用React,那么把這兩個包直接引入就可以了。

<!-- 引入react -->
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<!-- 引入react-dom -->
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

如果想要使用JSX語法,那么必須引入Babel。

<!-- 引入Babel,使瀏覽器可以識別JSX語法,如果不使用JSX語法,可以不引入 -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

接下來我會以一個完整的html示例來給大家展示,在剛開始學習React的時候可以使用這種方式。

首先創建一個index.html文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>React</title>
</head>
<body></body>
</html>

接下來引入相關的包

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>React</title><!-- 引入react --><script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script><!-- 引入react-dom --><script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><!-- 引入Babel,使瀏覽器可以識別JSX語法,如果不使用JSX語法,可以不引入 --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head><body></body></html>

在body標簽中創建Dom結構以及script標簽,這里因為引入了babel,所以script標簽的type必須是"text/babel"。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>React</title><!-- 引入react --><script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script><!-- 引入react-dom --><script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><!-- 引入Babel,使瀏覽器可以識別JSX語法,如果不使用JSX語法,可以不引入 --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head><body><div id="app"></div><script type="text/babel">// 必須添加type="text/babel",否則不識別JSX語法</script>
</body></html>

然后在scirpt中寫React代碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>React</title><!-- 引入react --><script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script><!-- 引入react-dom --><script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><!-- 引入Babel,使瀏覽器可以識別JSX語法,如果不使用JSX語法,可以不引入 --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head><body><div id="app"></div><script type="text/babel">// 必須添加type="text/babel",否則不識別JSX語法class App extends React.Component {render() {return(<div><h1>Hello World</h1></div>)}}ReactDOM.render(<App />, document.getElementById('app'))</script>
</body></html>

最后在瀏覽器中打開index.html,頁面上會渲染出Hello World。

使用官方腳手架creact-react-app

這種方式其實比較簡單,官方以及替我們封裝好了需要的庫,我們只要直接使用就可以來。
使用腳手架也有兩種方式。
第一種是官方網站教程給出的方式,使用npx命令

npx create-react-app <項目名>

我們用這條命令來創建一個my-app的項目

npx create-react-app my-app

創建完成后會在當前目錄下出現一個my-app的文件夾,進入my-app目錄,運行npm run start

cd my-app
npm run start

然后就可以在瀏覽器中看到默認的頁面
項目創建完成的頁面結構如下

1001e10c99a7c30cf30dbe0d4b0e09af.png


create-react-app項目結構

這個結構還是比較清晰的,稍微有前端開發經驗的程序員應該都可以看懂,初學者可以直接在App.js中寫React代碼。

接下來介紹第二種使用腳手架的方式,其實相差不大,這是方式是使用npm命令,和vue-cli非常類似。
首先通過npm全局安裝create-react-app

npm install -g create-react-app

mac用戶如果安裝不成功可以加上sudo命令

sudo npm install -g create-react-app

然后使用create-react-app命令來創建項目

create-react-app <項目名>

創建my-app項目

create-react-app my-app

創建出的項目和第一種方式創建的項目一致。

使用webpack、babel、react來創建React項目

初始化項目

首先第一步我們先創建一個名字是my-app的文件夾

mkdir my-app

進入該目錄

cd my-app

然后在my-app目錄下創建src文件夾用來存放React代碼

mkdir src

使用npm命令初始化項目

npm init -y

此時的項目結構如下

14704eda07605b62a7b32673bfe23904.png


項目結構

安裝webpack

首先安裝webpack和webpack-cli,webpack-cli包含了webpack的眾多指令,所以需要安裝。

npm install webpack webpack-cli --save-dev

注意: 在這里簡單介紹一下npm install命令的參數 --save-dev 和 --save的區別,一般來說使用--save-dev參數安裝的npm包在最終打包的時候不會被包括到源碼里去,所以類似bebel和webpack這種進行項目工程構建或者代碼編譯的庫應該用--save-dev來安裝,而--save則是安裝代碼運行必須的庫,比如react等。

安裝Babel

進行前端工程化的時候大多數前端工程師都會用到babel,最開始的babel是用來把es6的代碼編譯成es5的代碼,讓前端開發者在使用新的特性的同時不必考慮瀏覽器兼容問題。雖然現在的主流瀏覽器已經支持大部分的es6的新特性,但是因為JavaScript每年都會有一些新的特性被提出,而瀏覽器不一定能在特性推出后及時實現,或者是有一些還在實驗中的語法。使用來babel后就可以忽略這些問題,可以放心使用新的JavaScript語法,甚至是實驗性的語法。

接下來我們會安裝這幾個包:

  • @babel/core
  • @babel/preset-env
  • @babel/preset-react
  • babel-loader
    很明顯@babel/core是babel的核心庫,必須安裝,@babel/preset-env幫助我們把es6的語法編譯成es5的語法,@babel/preset-react則是幫我們識別JSX語法,babel-loader則是幫我們把不同的文件轉化成我們想要的格式輸出,或者說就是將我們的經過babel處理后的代碼進行輸出成瀏覽器可以識別的文件。

安裝指令

npm install @babel/core babel-loader @babel/preset-env @babel/preset-react --save-dev

在安裝成功后必須進行babel的配置,在根目錄my-app建立.babelrc文件,然后寫入以下配置

{"presets": ["@babel/preset-env", "@babel/preset-react"]
}

然后我們需要做一些webpack的配置,在根目錄my-app建立webpack.config.js文件,然后寫入以下配置

const path = require('path');module.exports = {entry: './src/main.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /.js$/,exclude: /node_modules/,use: {loader: "babel-loader"}}]}
};

在babel配置完之后,我們需要在./src目錄下新建三個文件index.html、main.js、App.js,此時我們的項目的所有文件都創建完畢,項目結構應該如下所示:

ae0971b507b75f6b3616a4e6eec70019.png


項目結構

接下來因為webpack默認只能對.js文件進行最終打包,而我們的項目是有.html文件的,所以我們必須下載和html有關的loader和插件來對html進行處理。

處理html

安裝html-webpack-plugin和html-loader

npm install html-webpack-plugin html-loader --save-dev

在安裝完成之后我們需要在webpack.config.js中進行配置
webpack.config.js文件內容如下

const path = require('path');
const HtmlWebPackPlugin = require("html-webpack-plugin");
module.exports = {entry: './src/main.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /.js$/,exclude: /node_modules/,use: {loader: 'babel-loader'}},{test: /.html$/,use: {loader: 'html-loader'}}]},plugins: [new HtmlWebPackPlugin({titel: 'react app',filename: 'index.html',template: './src/index.html'})]
};

配置完成后我們開始寫react代碼,首先在index.html文件中寫入以下代碼(在一個基本.html頁面中加一個id是app的div)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>React</title>
</head>
<body><div id="app"></div>
</body>
</html>

然后在寫react代碼前需要安裝react和react-dom

npm install react react-dom --save

在App.js文件中創建一個組件并導出

import React from 'react'class App extends React.Component {render() {return(<div><h1>Hello World</h1></div>)}
}export  default App

在main.js中將組件導入并渲染

import React from 'react'
import ReactDOM from 'react-dom'
import App from './App.js'ReactDOM.render(<App/>, document.getElementById('app'))

運行項目

所有的代碼已經完畢,在運行前我們還要安裝webpack-dev-server用來啟動一個本地服務器來瀏覽我們的項目并且可以實現保存自動刷新

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

然后在根目錄的package.json中寫一個腳本

"scripts": {"start": "webpack-dev-server --open --mode development"
}

最后運行npm run start就可以在瀏覽器中看到Hello World了

npm run start

總結

這篇文章介紹了三種創建React的方式,一般來說使用官方的腳手架比較方便,自己用webpack配置的話則更加靈活,根據項目的不同需要選擇不同的方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用JSONP解決AJAX跨域問題的原理與jQuery解決方案

寫在前面 跨域的解決方案有多種&#xff0c;其中最常見的是使用同一服務器下的代理來獲取遠端數據&#xff0c;再通過ajax進行讀取&#xff0c;而在這期間經過了兩次請求過程&#xff0c;使得獲取數據的效率大大降低&#xff0c;這篇文章藍飛就為大家介紹一下解決跨域問題的一種…

江西理工大學南昌校區cool code競賽

這次比賽原本就是來打醬油的&#xff0c;想做個簽到題就走&#xff01;一開始不知道1002是簽到題&#xff0c;一直死磕1001&#xff0c;WA了四發過了&#xff0c;回頭一看Rank&#xff0c;三十名&#xff0c;我靠&#xff01;看了1001的AC率&#xff0c;在我AC之前只有一個人AC…

mysql 枚舉_詳解MySQL數據類型之枚舉類型ENUM的用法

本節主要內容&#xff1a;MySQL數據類型之枚舉類型ENUMMySQL數據庫提供針對字符串存儲的一種特殊數據類型&#xff1a;枚舉類型ENUM&#xff0c;這種數據類型可以給予我們更多提高性能、降低存儲容量和降低程序代碼理解的技巧&#xff0c;前面介紹了首先介紹了四種數據類型的特…

# 異運算_小學數學運算三要點:定律、法則與順序(解析)

很多孩子的數學不好&#xff0c;尤其是女孩子。家長往往認定為數學不好就是孩子不擅長&#xff0c;能力差。其實未必&#xff0c;有的孩子數學不好的原因并不在于智商&#xff0c;而是沒有理解到數學的方法與邏輯&#xff0c;比如小學的運算中&#xff0c;很多孩子并沒有了解到…

如何實現一個教師與學生教學輔助平臺?

在軟件工程的學習過程中&#xff0c;我們要完成一個團體項目&#xff0c;關于個人教學輔助系統&#xff0c;對于這個&#xff0c;還有太多要學。對于如何實現其中的功能&#xff0c;我們會利用到html&#xff0c;css等語言來編寫網頁前端&#xff0c;同樣也會用到數據庫的知識。…

證明創建runnable實例和普通類時間一樣長

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//證明創建runnable實例和普通類時間一樣長public class Test002 { private Concurre…

mysql數據庫維護_維護MySQL數據庫表

在本教程中&#xff0c;我們將向您介紹一些非常有用的語句&#xff0c;使您可以在MySQL中維護數據庫表。MySQL提供了幾個有用的語句&#xff0c;可以有效地維護數據庫表。 這些語句使您能夠分析&#xff0c;優化&#xff0c;檢查和修復數據庫表。分析表語句MySQL查詢優化器是My…

node-glob 正則表達式

https://github.com/isaacs/node-glob轉載于:https://www.cnblogs.com/chris-oil/p/6507368.html

機器學習筆記—再談廣義線性模型

前文從線性回歸和 Logistic 回歸引出廣義線性回歸的概念&#xff0c;很多人還是很困惑&#xff0c;不知道為什么突然來個廣義線性回歸&#xff0c;有什么用&#xff1f;只要知道連續值預測就用線性回歸、離散值預測就用 Logistic 回歸不就行了&#xff1f;還有一些概念之間的關…

python連接access數據庫odbc_對Python通過pypyodbc訪問Access數據庫的方法詳解

看書上通過ODBC訪問數據庫的案例&#xff0c;想實踐一下在Python 3.6.1中實現access2003數據庫的鏈接&#xff0c;但是在導入odbc模塊的時候出現了問題&#xff0c;后來查了一些資料就嘗試著使用pypyodbc&#xff0c;最后成功了。操作步驟&#xff1a;①安裝pypyodbc目前Python…

mysql異機備份

xx.xx..4.43----xx.xx..4.51 1、配置client通過密鑰來連接server 43機器上&#xff1a; /root/.ssh 目錄下執行 ssh-keygen -t rsa ls /root/.ssh會發現在/root/.ssh下生成一對密鑰id_dsa和id_dsa.pub&#xff0c;將生成的公鑰id_dsa.pub拷貝到server的/root/.ssh目錄下&#…

周末想找個地方敲代碼_觀看我們的代碼游戲,全周末直播

周末想找個地方敲代碼by freeCodeCamp通過freeCodeCamp 觀看我們的代碼游戲&#xff0c;全周末直播 (Watch us Code Games Live All Weekend) Note: this was originally published on our now-defunct blog on July 15, 2015.注意&#xff1a;該文章最初于2015年7月15日發布在…

5.7和5.6的mysql_mysql5.6和5.7的區別

展開全部MySQL 5.7 已經開發兩年了。相比 MySQL 5.6&#xff0c;有特別多的改進。團隊主要關注速度&#xff0c;性能據報告是比之前62616964757a686964616fe4b893e5b19e31333365643661版本提升了 2 至 3 倍。新特性列表&#xff0c;主要改進&#xff1a;提升 MySQL 安全性改進了…

01:數制轉換

01:數制轉換 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述求任意兩個不同進制非負整數的轉換&#xff08;2進制&#xff5e;16進制&#xff09;&#xff0c;所給整數在long所能表達的范圍之內。不同進制的表示符號為&#xff08;0&#xff0c;1&#xff0c;...&am…

局域網只能看到一部分電腦_win10 網上鄰居看不到其它電腦、共享不了文件

最近電腦遇到了局域網文件共享的問題&#xff0c;Win 10 系統在網絡和共享中心里無法看到其他電腦&#xff0c;只能看到本機。確認共享已經打開后&#xff0c;通過查找最終解決。下面是解決流程。1.進入&#xff1a;控制面板 – 網絡和共享中心 – 更改高級共享設置&#xff0c…

javascript 開發_25個新JavaScript開發人員的免費資源

javascript 開發by freeCodeCamp通過freeCodeCamp 25個新JavaScript開發人員的免費資源 (25 Free Resources for New JavaScript Developers) We asked our campers to share their favorite free resources for new JavaScript developers on Camper News. The list includes…

mysql數據庫語法_MySQL數據庫語法(一)

MySQL數據庫語法數據庫管理系統(DBMS)的概述什么是DBMS&#xff1a;數據的倉庫方便查詢可存儲的數據量大保證數據的完整、一致安全可靠DBMS的發展&#xff1a;今天主流數據庫為關系型數據庫管理系統(RDBMS 使用表格存儲數據)常見DBMS&#xff1a;Orcale、MySQL、SQL Server、DB…

作業1---四則運算

一.需求分析&#xff1a; 除了整數以外&#xff0c;還要支持真分數的四則運算&#xff0c;真分數的運算&#xff0c;例如&#xff1a;1/6 1/8 7/24 運算符為 , ?, , 并且要求能處理用戶的輸入&#xff0c;并判斷對錯&#xff0c;打分統計正確率。 要求能處理用戶輸入的真分…

python有序數組中刪除元素_python刷LeetCode:26. 刪除排序數組中的重復項

題目描述&#xff1a;給定一個排序數組&#xff0c;你需要在原地刪除重復出現的元素&#xff0c;使得每個元素只出現一次&#xff0c;返回移除后數組的新長度。不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。示例 1:給定數組…

mysql數據庫修改數據庫名稱_MySQL數據庫之MySQL 修改數據庫名稱的一個新奇方法...

本文主要向大家介紹了MySQL數據庫之MySQL 修改數據庫名稱的一個新奇方法 &#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習MySQL數據庫有所幫助。MySQL在5.1引入了一個rename database操作&#xff0c;但在MySQL5.1.23后又不支持這個命令。可以說是一個實驗性的…