详解基于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 相关文章推荐
在视频前插入广告
Nov 20 Javascript
cloudgamer出品ImageZoom 图片放大效果
Apr 01 Javascript
IE6下focus与blur错乱的解决方案
Jul 31 Javascript
用jquery实现点击栏目背景色改变
Dec 10 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
JavaScript实现的简单幂函数实例
Apr 17 Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 Javascript
浅谈Node框架接入ELK实践总结
Feb 22 Javascript
深入理解令牌认证机制(token)
Aug 22 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 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
一个显示天气预报的程序
2006/10/09 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
Python3实现生成随机密码的方法
2014/08/23 Python
python进阶教程之动态类型详解
2014/08/30 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
运动会入场解说词300字
2014/01/25 职场文书
员工晚婚的请假条
2014/02/08 职场文书
年终总结会议主持词
2014/03/17 职场文书
财务检查整改报告
2014/11/06 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python