webpack+react环境搭建

前言

我们知道前端的框架纷繁复杂,各有各的优点。而我们选择使用React作为开发框架的时候,往往会选择Webpack+Babel+React来开始我们的项目。之前也讲过其他的前端框架,如 gulp+webpack,准确的说这不是一个框架,只是项目组织的形式而已。

Webpack+Babel+React环境搭建

安装Webpack

关于Webpack的介绍这里不讲解,大家可以看之前的讲解webpack介绍。

npm install webpack -g

创建一个项目

创建一个名叫learn-webpack项目,并进去项目目录。

mkdir learn-webpack 
cd learn-webpack

接下来我们来创建2个文件:app.js和index.html,我们在也没上输出一个”Hello World”, app.js:

document.querySelector('#app').innerHTML = 'Hello World!';

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Learn-webpack</title>
</head>
<body>
  <div id="app"></div>
  <script src="dist/bundle.js"></script>
</body>
</html>

然后在终端执行如下命令:

webpack ./app.js ./dist/bundle.js

最后执行启动本地的http服务,我们这里用python:

python -m SimpleHTTPServer

然后我们访问:http://localhost:8000就可以看到效果了

webpack文件配置

实际上每个项目下都应该包含一个webpack.config.js,用来告诉Webpack需要做些什么,这个我们之前文章也说过。

module.exports = {
  entry: "app.js",
  output: {
    path: __dirname+"/dist",
    filename: "bundle.js"
  }
}

接下来我们在终端运行命令,看看是不是和之前输入 webpack ./app.js ./dist/bundle.js 的打包编译结果一样呢,答案是肯定的。

webpack

注: entry:指定打包的入口文件

  • 单个文件打包为单个输出文件,直接写该文件的名字,例如:entry:”main.js”
  • 多个文件打包为单个输出文件,将文件名放进一个数组,例如:entry:[‘main.js’,’xx.js’]
  • 多个文件打包为多个输出文件,将文件名放入一个键字对,例如:entry: {a:’main.js’,b:’xx.js’} output:配置打包结果 path为定义输出文件夹,filename为打包结果文件的名称,如果指定打包入口文件为上面的1、2种情况,filename里面直接跟你想输出的文件名。若为第3种情况filename里面需写成[name].文件名.js,filename里面的[name]为entry中的键。监听变化自动打包 当我们在不停的对代码进行变动的时候,为了不修改一次然后又手动去进行打包一次,可以使用webpack的watch功能。这也算是webpack的一个黑科技,以前做后端的时候必须重新部署,这个是很蛋疼的。
webpack --watch 或者 webpack -w

或者我们可以直接在配置代码里面把watch设置为true。

module.exports = {
  entry: "app.js",
  output: {
    path: __dirname+"/dist",
    filename: "bundle.js"
  },
  watch: true
}

Babel配置

Babel 是一个 JavaScript 编译器。使用它可以将ES6的语法转换为ES5的语法,以便在现在有的环境执行之前的代码。 首先安装basel。

npm install webpack babel-loader babel-core babel-preset-es2015 --save-dev

执行安装完成后需要将之前的webpack.config.js修改为:

module.exports = {
  entry: "./app.js",
  output: {
    path: __dirname+"/dist",
    filename: "bundle.js"
  },
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['es2015']
        }
      }
    ]
  },
  resolve: {
    extensions: ['','.coffee','.js']
  }
}

现在就能在文件里面以ES6的语法进行代码编写,如在app.js加入:

var func = str => {
  console.log(str);
};
func('Hello Babel!');

我们再次运行,如果看到输出,就说明配置成功了。这里有关Loader的知识和配置就不讲究了,大家可以网上补补。

与React结合

终端输入以下代码对react和react-dom进行安装:

npm install react react-dom --save

安装Babel针对React的预设插件:

npm install babel-preset-react --save-dev

由于我们增加了react的预设插件,所以需要对webpack.config.js进行修改。将module -> loaders下面的query修改如下:

query: {
    presets: ['es2015','react']
}

接下来我们创建一个hello.js.

import React from "react";

class Hello extends React.Component{
  render() {
    return (
      <div>
          Hello, World!
      </div>
    )
  }
}

export default Hello;

在app.js做一下配置:

import React from "react";
import ReactDOM from "react-dom";
import Hello from "./hello";

ReactDOM.render(
  <Hello />,
  document.querySelector('#app')
);

哈哈哈,这里如果大家做过React Native的,这里是不是感觉很亲切,只不过React Native还是用的npm在做管理。我们同样启动服务在看看,如果看到Hello World!就说明环境配置成功。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Gcaufy的专栏

打造小程序组件化开发框架

这篇主要介绍在使用小程序数月之后,结合自己的开发习惯,总结出一套支持组件化的开发框架。希望对大家使用 WePY 有所帮助。

4.5K20
来自专栏mySoul

微信小程序插件

微信小程序插件是对一组js接口,自定义组件或页面的封装,用来嵌入微信小程序中,用来被开发者调用。

2.1K30
来自专栏张戈的专栏

WordPress开启颜色评论但不造成XSS漏洞的小方法

前段时间分享过一些 XSS 漏洞的修复技巧,而且也说到了 WordPress 开启颜色评论需要在 functions.php 中插入如下代码,也就是禁用 Wor...

358100
来自专栏WindCoder

5月14日项目小结-微信中图片选择与上传

10720
来自专栏Android干货

小程序实践(五):for循环绑定item的点击事件

--------------------------------------------------------------------------------...

17910
来自专栏ArrayZoneYour的专栏

借助Babel 7和Webpack构建React Toolchain

React不是完全开箱即用的。它使用了一些最近node才支持的关键字和语法(在本教程中我使用了v 9.3.0版本)。因此需要一些很麻烦的设置,但是Faceboo...

26140
来自专栏BestSDK

开发微信小程序,必知的40个小技巧

微信小程序开发者和开发需求者必读的40条技巧分享: Q:为什么脚本内不能使用window等对象 A:页面的脚本逻辑是在JsCore中运行,JsCore是一个没有...

61530
来自专栏HaHack

学习 React Native for Android:环境搭建

11620
来自专栏SDNLAB

【每日播报】如何升级Mininet的Open vSwitch版本

因为Mininet的方便且易用,以及实验条件及真实设备的不足,它已经被越来越多的SDN学习者使用。但在Mininet使用中,安装使用的内置Open vSwitc...

39550
来自专栏假装我会写代码

highlight.js 在 Vue 中使用的一点儿经验

29020

扫码关注云+社区

领取腾讯云代金券