手动用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 一个函数对同一元素的多个事件响应
Jul 25 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
table行随鼠标移动变色示例
May 07 Javascript
jQuery动态背景图片效果实现方法
Jul 03 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
React简单介绍
May 24 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
Aug 28 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 Javascript
vue 实现特定条件下绑定事件
Nov 09 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
node.js +mongdb实现登录功能
Jun 18 Javascript
详解Vue的options
May 15 Vue.js
浅谈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
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
python基础教程之常用运算符
2014/08/29 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
django基于restframework的CBV封装详解
2019/08/08 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
python 读取数据库并绘图的实例
2019/12/03 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
财务部副经理岗位职责范本
2014/06/17 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang