详解基于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 相关文章推荐
关于IFRAME 自适应高度的研究
Jul 20 Javascript
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
jQuery使用元素属性attr赋值详解
Feb 27 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
浅谈angular.js跨域post解决方案
Aug 30 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
JS随机数产生代码分享
Feb 24 Javascript
webgl实现物体描边效果的方法介绍
Nov 27 Javascript
JavaScript事件的委托(代理)的用法示例详解
Feb 18 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中Snoopy类用法实例
2015/06/19 PHP
php类常量用法实例分析
2015/07/09 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
php报错502badgateway解决方法
2019/10/11 PHP
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
angular2使用简单介绍
2016/03/01 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
Python set集合类型操作总结
2014/11/07 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
django 微信网页授权登陆的实现
2019/07/30 Python
python3实现简单飞机大战
2020/11/29 Python
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
贷款担保申请书
2014/05/20 职场文书
师范生求职信
2014/06/14 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
党小组鉴定意见
2015/06/02 职场文书
欢迎新生标语2015
2015/07/16 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
排查Tomcat进程假死的问题
2022/05/06 Servers