手动用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定时保存表单数据的代码
Mar 17 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
May 04 Javascript
node.js中的querystring.escape方法使用说明
Dec 10 Javascript
JavaScript组件焦点与页内锚点间传值的方法
Feb 02 Javascript
javascript制作的简单注册模块表单验证
Apr 13 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
canvas的神奇用法
Feb 03 Javascript
Angular使用$http.jsonp发送跨站请求的方法
Mar 16 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
JavaScript实例 ODO List分析
Jan 22 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打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
详解Python3中yield生成器的用法
2015/08/20 Python
python去除字符串中的换行符
2017/10/11 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Django 自动生成api接口文档教程
2019/11/19 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
appium+python adb常用命令分享
2020/03/06 Python
python 基于opencv操作摄像头
2020/12/24 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
停车位租赁协议书
2014/09/24 职场文书
银行自荐信怎么写
2015/03/05 职场文书
自我评价优缺点范文
2015/03/11 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python