手动用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 树控件 比较好用
Jun 11 Javascript
JavaScript Sort 表格排序
Oct 31 Javascript
JavaScript中按位“异或”运算符使用介绍
Mar 14 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
JS小数转换为整数的方法分析
Jan 07 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
Jul 06 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
JavaScript内存泄漏的处理方式
Nov 20 Javascript
JS对日期操作封装代码实例
Nov 08 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 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开发中常用的字符串操作函数
2011/02/08 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
页面使用密码保护代码
2013/04/10 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python使用json序列化datetime类型实例解析
2018/02/11 Python
python画折线图的程序
2018/07/26 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
后勤岗位职责
2013/11/26 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
军训后的感想
2015/08/07 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
Python中time与datetime模块使用方法详解
2022/03/31 Python