手动用webpack搭建第一个ReactApp的示例


Posted in Javascript onApril 11, 2018

学习 React 可以用以下方法直接创建一个 ReactApp ,本文主要介绍如何手动来搭这个环境。

npm install -g create-react-app
create-react-app my-app
cd my-app
npm start

使用淘宝 NPM 镜像

使用 React 和 Webpack 需要安装很多依赖包,不走代理的话速度会非常慢,也很容易出错,所以这里推荐使用淘宝的 npm 镜像来安装,速度非常理想。

使用淘宝镜像安装 npm 包只需要两步即可:

安装 cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

使用 cnpm 来安装包

只需要将 npm 替换成 cnpm 即可获得高速下载。

cnpm install [name]

下文中给出的所有安装依赖包的命令都使用 cnpm 安装的。你也可以用 npm。

开始第一个 React

初始化一个 json 配置文件

npm init

执行上面这条命令后输入一些信息即可创建 json 文件,这个文件也可以手动建。entry point 要填 index.js,其他的随意。

手动用webpack搭建第一个ReactApp的示例

安装 React

cnpm install react react-dom --save

安装编译工具 babel

cnpm install babel-core babel-loader babel-preset-react babel-preset-es2015 --save-dev

安装打包工具 wepback

全局的和当前文件夹的最好都装上,这样可以花式打包。

cnpm install webpack webpack-cli --save-dev
cnpm install webpack-dev-server --save-dev
cnpm install webpack webpack-cli -g
cnpm install webpack-dev-server -g

配置 webpack

为了方便,以下所有文件都建在同一个文件夹下面。

新建 webpack.config.js 并添加以下内容

const path =require('path'); 
module.exports = { 
 entry: path.resolve(__dirname, 'index.js'), 
 output: { 
 path: path.resolve(__dirname, ''), 
 filename: "bundle.js" 
 }, 
 mode: 'development',
 module: { 
 rules: [ 
  { 
  test: /\.js$/, 
  exclude: /node_modules/, 
  loader: "babel-loader", 
  options: { 
   presets: ["es2015","react"] 
  } 
  } 
 ] 
 } 
};

在 webpack4 中 mode 属性如果不指定会有警告。

创建测试文件

新建 index.js 文件

import React from 'react'; 
import ReactDOM from 'react-dom'; 
 ReactDOM.render( 
 <h1>我的第一个react例子</h1>, 
 document.getElementById('root') 
 );

新建 index.html 文件

<!DOCTYPE html> 
 <html> 
 <head> 
 <meta charset="UTF-8" /> 
 <title>example</title> 
 </head> 
 <body> 
 <div id="root"></div> 
 <script src="bundle.js"></script> 
 </body> 
 </html>

启动

最后执行 webpack 即可将 index.js 打包生成浏览器可执行的 bundle.js 文件。此时,index.html 文件已经可在浏览器中执行了。

附上我的 package.json 文件,直接执行 cnpm install 就能安装所有依赖。

{
 "name": "myapp",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "start": "webpack",
 "start:dev": "webpack-dev-server"
 },
 "author": "",
 "license": "ISC",
 "devDependencies": {
 "babel-core": "^6.26.0",
 "babel-loader": "^7.1.4",
 "babel-preset-es2015": "^6.24.1",
 "babel-preset-react": "^6.24.1",
 "webpack": "^4.2.0",
 "webpack-cli": "^2.0.12",
 "webpack-dev-server": "^3.1.1"
 },
 "dependencies": {
 "react": "^16.2.0",
 "react-dom": "^16.2.0"
 }
}

热启动

如果 index.js 发生了改变,则需要再编译打包一次,才能更新 bundle.js 文件,这样效率非常低。webpack 提供了一条命令可以实时进行编译打包。

webpack --watch

执行这条命令后,index.js 文件就能被动态编译打包了,非常方便。

不过上面的热启动还是很麻烦,还要手动刷新浏览器,这里还有很牛逼的。

直接执行 webpack-dev-server 即可自动刷新浏览器

 手动用webpack搭建第一个ReactApp的示例

如果要换端口的话,在启动命令后面加上--port 端口号即可,例如:webpack-dev-server --port 8001

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript For Beginners(转载)
Jan 05 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
Sep 12 Javascript
JavaScript中奇葩的假值示例应用
Mar 11 Javascript
javascript转换日期字符串为Date日期对象的方法
Feb 13 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
Mar 04 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
Nov 09 Javascript
js实现导航栏中英文切换效果
Jan 16 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 Javascript
JavaScript实现的联动菜单特效示例
Jul 08 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 #Javascript
vue 组件高级用法实例详解
Apr 11 #Javascript
vue单个组件实现无限层级多选菜单功能
Apr 10 #Javascript
React如何避免重渲染
Apr 10 #Javascript
vue select组件的使用与禁用实现代码
Apr 10 #Javascript
vue 自定义 select内置组件
Apr 10 #Javascript
JavaScript如何对图片进行黑白化
Apr 10 #Javascript
You might like
PHP高级OOP技术演示
2009/08/27 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
JS实现复制功能
2017/03/01 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
Python、Javascript中的闭包比较
2015/02/04 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
初中生物教学反思
2014/01/10 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
交通安全标语
2014/06/06 职场文书
车辆年审委托书范本
2014/09/18 职场文书
客房部经理岗位职责
2015/02/02 职场文书
庐山导游词
2015/02/03 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
个人求职意向书
2015/05/11 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android