详解基于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 相关文章推荐
浅谈document.write()输出样式
May 07 Javascript
jQuery插件expander实现图片翻转特效
May 21 Javascript
Javascript中的getUTCDay()方法使用详解
Jun 10 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
Java中Timer的用法详解
Oct 21 Javascript
JQuery+EasyUI轻松实现步骤条效果
Feb 22 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
Jul 22 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
探索Javascript中this的奥秘
Dec 11 Javascript
Angularjs 手写日历的实现代码(不用插件)
Oct 18 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 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
德生PL330测评
2021/03/02 无线电
PHP7.0版本备注
2015/07/23 PHP
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
javascript 闭包详解
2015/07/02 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
Vuex简单入门
2017/04/19 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
实例分析javascript中的异步
2020/06/02 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python操作redis的方法
2015/07/07 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python 调用钉钉机器人的方法
2019/02/20 Python
Python hmac模块使用实例解析
2019/12/24 Python
python实现人工蜂群算法
2020/09/18 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
学前教育专业毕业生自荐信
2013/10/03 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
火车来了教学反思
2014/02/11 职场文书
新农村建设标语
2014/06/24 职场文书
2015年公司工作总结
2015/04/25 职场文书
被告代理词范文
2015/05/25 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android