详解基于webpack搭建react运行环境


Posted in Javascript onJune 01, 2017

最近由于项目需要,所以尝试使用webpack搭建react运行环境,在克服了一系列困难后,终于能在页面输出"Hello World",特地把整个过程记录下来,利人利己。

首先我创建了一个文件夹webpack-helloworld-demo,之后的大部分操作都会在这个文件夹下进行。

1.初始化文件夹

npm init //初始化一个package.json文件
git init  //产生.git文件,便于之后版本提交回退

2.搭建webpack环境

npm install webpack --save-dev //安装webpack依赖

--save建议使用,这样当别人clone你的代码时,只需要npm install就可以安装好所有需要的依赖,并且你也可以在你的package.json文件夹中看到你使用的哪些依赖。

现在我们可以测试下webpack有没有安装成功,在文件夹根目录下创建三个文件,分别是entry.jsbundle.jsindex.html,文件内容分别如下。

//entry.js
document.write('Hello World');
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
</head>
<body>
<script type="text/javascript" src="bundle.js" charset="utf-8"></script>
</body>
</html>

bundle.js内容为空

执行命令行:webpack ./entry.js bundle.js

之后会发现bundle.js文件下有好多代码出现,这就是经过webpack打包后的文件。在浏览器打开index.html,页面会出现Hello World,webpack安装成功!

3.配置webpack

创建webpack.config.js文件,进行如下基本配置

module.exports = {
  entry: "./entry.js", // 要打包的入口文件
  output: {        //打包后的文件
    path: __dirname,  //表示使用绝对路径
    filename: "bundle.js" //输出文件名
  },
  module: {
    loaders: [      //用于加载一些静态文件夹(css样式,图片之类)
     { test: /\.css$/, loader: "style!css" },
     {
        test: /\.jsx?$/,
        loader: 'babel-loader',
        exclude: /node_modules/, //不进行转换的文件,可以提高打包速度
        query: {
          cacheDirectory: true,
          presets: ['react', 'es2015']
        }
      }
    ]
  }
};

执行命令:webpack

打开index.html出现Hello World,配置成功。

现在我们的文件目录如下:

详解基于webpack搭建react运行环境

4.express下运行

npm install express --save-dev

创建server.js

var express = require('express'); 
var app = express();

app.use(express.static('./')); //访问当前目录下的静态文件。默认访问index.html

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});
执行命令:
webpack // 用于打包文件
node server.js // 开启服务器

浏览器访问 http://localhost:3000/ , 页面显示Hello World,运行成功!

5.配置 React, ES6 & Babel 6

npm install react --save-dev
npm install react-dom --save-dev
npm install babel-loader --save-dev // 转换JSX
npm install babel-core --save-dev // babel的核心包
npm install babel-preset-es2015-dev // es2015的babel预设
npm install babel-preset-react-dev // react的babel预设

创建文件.babelrc

{
  "presets": [
   "es2015",
   "react"
  ]
 }

接下来就是写react小例子测试啦,在entry.js写入:

import React, {Component} from 'react';
import {render} from "react-dom";

class HelloMessage extends React.Component {

  render() {
    return <div>Hello World</div>;
  }
}
render(<HelloMessage />, document.getElementById('app'));

为了将组件渲染到页面,我们需要在index.html中添加一个相当于容器的div:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
</head>
<body>
<div id="app"></div> // 添加的div,渲染至div中
<script type="text/javascript" src="bundle.js" charset="utf-8"></script>
</body>
</html>

浏览器访问 http://localhost:3000/ , 页面显示Hello World,运行成功!

现在我们的文件目录为:

详解基于webpack搭建react运行环境

至此我们就搭建好了一个简单的环境啦~

框架Github地址:https://github.com/DQing/webpack-helloworld-demo.git

大家在搭建框架时不要忘了小步提交。

还可以进行一些额外的配置,步骤其实都差不多

框架Github地址:https://github.com/DQing/jishiben.git

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

Javascript 相关文章推荐
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
Jan 08 Javascript
jQuery中Chosen三级联动功能实例代码
Mar 07 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
Apr 22 Javascript
浅谈vue中慎用style的scoped属性
Nov 28 Javascript
基于Vue实现拖拽功能
Jul 29 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
Angular使用cli生成自定义文件、组件的方法
Sep 04 Javascript
JS实现的排列组合算法示例
Jul 16 Javascript
微信公众号服务器验证Token步骤图解
Dec 30 Javascript
Vue路由权限控制解析
Nov 09 Javascript
关于Js中new操作符的作用详解
Feb 21 Javascript
jQuery+Ajax实现用户名重名实时检测
Jun 01 #jQuery
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 #Javascript
node.js中fs.stat与fs.fstat的区别详解
Jun 01 #Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
Jun 01 #Javascript
详解VUE 定义全局变量的几种实现方式
Jun 01 #Javascript
详解vue过滤器在v2.0版本用法
Jun 01 #Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
Jun 01 #Javascript
You might like
短波收音机简介
2021/03/01 无线电
PHP简介
2006/10/09 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
简单的分页代码js实现
2016/05/17 Javascript
学习vue.js计算属性
2016/12/03 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
原生JS实现的轮播图功能详解
2018/08/06 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
Python字符串替换实例分析
2015/05/11 Python
python修改操作系统时间的方法
2015/05/18 Python
编写Python CGI脚本的教程
2015/06/29 Python
python实现简单神经网络算法
2018/03/10 Python
对python函数签名的方法详解
2019/01/22 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
管理站站长岗位职责
2013/11/27 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
设计专业自荐信
2014/06/19 职场文书
公司合并协议书范本
2014/09/30 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
道歉情书大全
2015/05/12 职场文书
情人节单身感言
2015/08/03 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技