详解基于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 相关文章推荐
利用jquery的获取JS文件中的字符串内容
Feb 14 Javascript
js实现省市联动效果的简单实例
Feb 10 Javascript
jQuery EasyUI之DataGrid使用实例详解
Jan 04 Javascript
使用jQuery调用XML实现无刷新即时聊天
Aug 07 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 Javascript
基于layPage插件实现两种分页方式浅析
Jul 27 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 Javascript
JS实现简单日历特效
Jan 03 Javascript
原生JS实现留言板
Mar 26 Javascript
JavaScript如何实现图片处理与合成
May 29 Javascript
Js on及addEventListener原理用法区别解析
Jul 11 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的优点与缺点
2013/04/11 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
学习python的几条建议分享
2013/02/10 Python
python实现的解析crontab配置文件代码
2014/06/30 Python
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
python如何实现int函数的方法示例
2018/02/19 Python
python构建深度神经网络(DNN)
2018/03/10 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
关于圣诞节的广播稿
2014/01/26 职场文书
优秀实习生感言
2014/03/01 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
详解Vue3使用axios的配置教程
2022/04/29 Vue.js