详解基于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 相关文章推荐
encode脚本和normal脚本混用的问题与解决方法
Mar 08 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
Nov 28 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
Jan 24 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 jQuery
基于jstree使用AJAX请求获取数据形成树
Aug 29 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
Sep 30 Javascript
vue父子组件间引用之$parent、$children
May 20 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
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
node.js实现快速截图
2016/08/27 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
Vue程序调试的方法
2019/06/17 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
vuex的使用步骤
2021/01/06 Vue.js
python实现手机通讯录搜索功能
2018/02/22 Python
Python切片操作实例分析
2018/03/16 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
利用Python实现kNN算法的代码
2019/08/16 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python def 定义函数,调用函数方式
2020/06/02 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
《小猫刮胡子》教学反思
2014/02/21 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书