详解基于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 prototype对象的属性说明
Mar 13 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
Aug 19 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
使用post方法实现json往返传输数据的方法
Mar 30 Javascript
Vue实现拖放排序功能的实例代码
Jul 08 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实现的连贯操作、链式操作实例
2014/07/08 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
js如何打印object对象
2015/10/16 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python中类的初始化特殊方法
2017/12/01 Python
详解Python发送email的三种方式
2018/10/18 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
大学军训感言600字
2014/02/25 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
汇报材料怎么写
2014/12/30 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
员工工作心得体会
2019/05/07 职场文书