在开发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

然后就可以在浏览器中看到默认的页面
项目创建完成的页面结构如下

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

此时的项目结构如下

项目结构

安装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,此时我们的项目的所有文件都创建完毕,项目结构应该如下所示:

项目结构

接下来因为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配置的话则更加灵活,根据项目的不同需要选择不同的方式。

react项目_如何从零开始创建React项目(三种方式)相关推荐

  1. 深入解析React创建组件的三种方式

    eact创建组件的三种方式: 1.函数式无状态组件 2.es5方式React.createClass组件 3.es6方式extends React.Component 三种创建方式的异同 1.函数式无 ...

  2. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  3. 【Python】Python创建虚拟环境的三种方式

    Python创建虚拟环境的三种方式比较 Python创建虚拟环境的三种方式 首先:为什么需要虚拟环境? Pipenv vs Virtualenv vs Conda 1. Virtualenv 2. P ...

  4. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  5. js学习-DOM之动态创建元素的三种方式、插入元素、onkeydown与onkeyup两个事件整理...

    动态创建元素的三种方式: 第一种: Document.write(); <body> <input type="button" id="btn" ...

  6. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现

    工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...

  7. 把对象的创建交给spring来管理——  1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期

    把对象的创建交给spring来管理 spring对bean的管理细节     1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期 创建Bean的三种方式 ...

  8. 五、创建Bean的三种方式

    五.创建Bean的三种方式 转载于:https://www.cnblogs.com/ljiwej/p/7280614.html

  9. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

最新文章

  1. java webservice接口开发_搭建Soap webservice api接口测试案例系统
  2. linux获取随机数的方法集合
  3. Java基础 — 异常
  4. POJ - 1061 青蛙的约会(扩展欧几里得)
  5. 配置和使用OCS 2007会议功能
  6. html 缓存 js文件缓存吗,如何为css / js文件设置缓存
  7. 今天的虎兄才跳了过去的飞秋WZ132
  8. 知识库的构建 6-1 语义网 Semantic Web
  9. 使用jsp实现文件上传的功能
  10. 虚拟机ping不通宿主机,宿主机能ping通虚拟机
  11. Servlet 环境设置
  12. Da黄蜂vep云课堂6.05录屏截屏提取为mp4教程
  13. 中兴服务器isac配置,中兴AC 配置手册V1.0.docx
  14. 领导与管理的区别与联系
  15. Java10-I/O
  16. antd从v2升级到v3
  17. Matlab数字图像的傅里叶变换(FFT)
  18. python 如何安装numpy库?
  19. Python |浅谈爬虫的由来
  20. 30种常用管理工具模型整理分享(上)

热门文章

  1. 搭建MSSM框架(Maven+Spring+Spring MVC+MyBatis)
  2. (转)dp动态规划分类详解
  3. COM组件的运行机制
  4. wordpress插件制作视频教程【资料分享】
  5. Server Develop (三) 多进程实现C/S
  6. 过程重要,还是结果重要?
  7. IE6不支持PNG图片透明效果的完美解决方案(完善版)
  8. 476. 数字的补数
  9. unity 克隆_使用Unity开发Portal游戏克隆
  10. sphinx_Sphinx之谜:如何轻松地编写代码