react入门之使用webpack搭配环境(一)

react入门之搭配环境(一)

如果你想直接上手开发,而跳过这些搭配环境的繁琐过程,推荐你使用官方的create-react-app命令

npm install -g create-react-app  //安装create-react-app脚手架   npm为node.js的包管理工具,请确保你已经安装了node.js
create-react-app my-app    //使用create-react-app创建,my-app为项目名称
cd my-app/     //进入my-app目录
npm start        //运行项目

现在打开 http://localhost:3000/ 就能看到初始界面

我不大愿意使用官方自带这个脚手架,是因为它的webpack配置太复杂,我比较愚钝看不大懂,还望有大神能研究透彻分享一下。

要如何create-react-app内部的webpack配置文件解压出来?

npm run eject

源代码

每次看教程我都喜欢先把项目跑起来,然后再一句一句代码地去了解。如果你也是:

git clone https://github.com/lingjiawen/HelloReact.git
cd HelloReact/
npm install
npm run dev

一、创建项目结构

新建一个文件夹,命名为HelloReact

顺口提一下,我用的IDE是Sublime

在该文件夹内这样组织你的项目结构:

|--app                       //项目组件
   |--components                  //组件结构
      |---Hello.jsx
   |--main.js                     //入口文件
|--build                     //项目build文件
   |--index.html                 //索引html|--.babelrc                  //babel转码工具配置文件
|--package.json              //npm说明文件,可以理解为包管理文件
|--webpack.config.js         //webpack配置文件

在build/index.html中拷贝以下代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>ReactDemo1</title>
    </head>
    <body>
        <!--插入React组件的位置-->
        <div id="main">
        </div>
        <script src="bundle.js"></script>
    </body>
</html>            

React代码插入到main中,而bundle.js是webpack打包生成的js文件,在这里你可以先帮它记下来下文看到了再回来一看就清楚了。

在package.json中输入以下代码:

注意,所有的注释都不要输入进去!

//package.json
{
  "name": "HelloReact",             //项目名字
  "version": "1.0.0",               //项目版本
  "main": "webpack.config.js",
  "scripts": {
    "start": "webpack",             //npm start的配置
  },
  "author": "",                     //作者
  "license": "ISC",
  "devDependencies": {
    //调试依赖项
    "babel-core": "^6.25.0",
    "babel-loader": "^7.1.1",
    "babel-plugin-react-transform": "^2.0.2",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-transform-hmr": "^1.0.4",
    "webpack": "^3.4.1",
  },
  "description": "",
  "dependencies": {
    //项目依赖项

  }
}

在webpack配置文件webpack.config.js中输入以下代码:

var webpack = require(‘webpack‘);//引入Webpack模块,注意这里只能使用ES5语法引入

module.exports = {
    entry: __dirname + "/app/main.js",//唯一入口文件
    output: {
        path: __dirname + "/build",//打包后的bundle.js文件存放的地方
        filename: "bundle.js"      //打包后的文件名
    },
    module: {
        //loaders加载器
        loaders: [
            {
                test: /\.(js|jsx)$/, //匹配loaders所处理的文件的扩展名的正则,如jsx和js文件
                loader: ‘babel-loader‘ //loader的名称
            }
        ]
    },
     plugins: [
        new webpack.HotModuleReplacementPlugin()//热模块替换插件
    ]
};

.babelrc是babel转码器的配置文件,它能将es6代码转换成es5代码,还支持react语法转换

在.babelrc中输入以下代码:

//.babelrc
{
  "presets": [
    "react",
    "es2015"
  ],
  "env": {
    "development": {
      "plugins": [
        [
          "react-transform",
          {
            "transforms": [
              {
                "transform": "react-transform-hmr",
                "imports": [
                  "react"
                ],
                "locals": [
                  "module"
                ]
              }
            ]
          }
        ]
      ]
    }
  }
}

在app/components/Hello.jsx中输入以下代码:

import React from ‘react‘;       //引入react

//创建组件类:名字首字母必须大写
class Hello extends React.Component {
    render() {
        return (
            <div>Hello World!</div>
        )
    }
}

//导出组件
export default Hello;

React 使用 JSX 来替代常规的 JavaScript。

JSX 是一个看起来很像 XML 的 JavaScript 语法扩展。

它看起来是在Javascript代码里直接写XML的语法,而实质上是一个语法糖,每一个XML标签都会被JSX转换工具(如babel)转换成纯Javascript代码

在app/main.js中输入以下代码:

//main.js
import React from ‘react‘;
import ReactDOM from ‘react-dom‘;
import Hello from ‘./components/Hello.jsx‘;

ReactDOM.render(
    <Hello />,
    document.getElementById(‘main‘)
);

二、运行项目

打开命令行,cd到HelloReact文件夹目录,运行

npm install

该命令会安装package.json的所有依赖文件,安装完成后,运行:

npm start

npm start命令是刚才你在package.json中定义的:

"scripts": {
    "start": "webpack",
  }

注:只有start可以省略run,其他都需要加上run,如 npm run dev;

你会发现build.js中多了bundle.js文件,这是你在webpack.config.js中定义的打包文件:

var webpack = require(‘webpack‘);//引入Webpack模块,注意这里只能使用ES5语法引入

module.exports = {
    ……
    output: {
        path: __dirname + "/build",//打包后的bundle.js文件存放的地方
        filename: "bundle.js"      //打包后的文件名
    },
    ……
};

打开该目录下的index.html,看到以下输出运行成功:


三、添加热替换模块

项目已经可以运行了,但是每次输完代码都要npm start进行打包,想想都没办法忍受,这就需要用到webpack-dev-server热替换模块,所见即所得

其实在前面的代码中,为了避免麻烦,我已经偷偷将热替换模块的部分配置加了进去

webpack.config.js中的

……
plugins: [
        new webpack.HotModuleReplacementPlugin()//热模块替换插件
    ]
……

package.json中的

 "devDependencies": {
    ……
    "babel-plugin-react-transform": "^2.0.2",
    "react-transform-hmr": "^1.0.4",
    "webpack-dev-server": "^2.6.1"
    ……
  }

还有.babelrc中的

"env": {
    "development": {
      "plugins": [
        [
          "react-transform",
          {
            "transforms": [
              {
                "transform": "react-transform-hmr",
                "imports": [
                  "react"
                ],
                "locals": [
                  "module"
                ]
              }
            ]
          }
        ]
      ]
    }
  }

你可以将这些代码删除,发现也是可以正常打包并运行。因为之前并没有用到热加载

那我现在想用,要怎么用呢?

很简单,在package.json中加入:

……
"scripts": {
    "start": "webpack",
    "dev": "webpack-dev-server"
  }
……

好,现在运行一下npm run dev

打开localhost:8080

咦,怎么是列出文件列表,哦哦哦,原来是没有配置默认路径;

……
"scripts": {
    "start": "webpack",
    "dev": "webpack-dev-server --contentBase=‘./build‘ "
  }
……

重新运行npm run dev:

修改app/components/Hello.jsx

保存后再回到页面,发现页面已经自动更新:

时间: 2024-10-12 17:15:13

react入门之使用webpack搭配环境(一)的相关文章

试着用React写项目-利用Webpack搭环境

转载请注明出处:王亟亟的大牛之路 最近都赋闲,然后前些天开了个会就是关于"不加班就得死"的死命令,作为抵制加班的先头兵,我感觉我时日无多是时候加快武装自己的速度不然吃土都不配了,就在这个大条件下捡起我丢在地上的React. ok,那既然知道要做什么了,就要考虑用什么来发布项目,这里第一考虑到Webpack 那Webpack能干什么? 官方对他的解释很简单 This small tutorial will guide you through a simple example. 我们用We

包建强的培训课程(15):React入门与提高

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈<「『[[[〝﹙﹛﹝$(.[{£¥ !%),.:;>?]}¢¨°·ˇˉ

[译] React 入门指南

原文链接:The React Quick Start Guide 这篇文章将概括性的介绍一下如何用 ReactJS 进行开发.我将介绍一些基础知识,不会有过于深入的分析.你可以结合这些代码阅读本文.更新:本文已经由 Hugo Bessa 翻译了葡萄牙语版. 一些概念 React 的 API 非常少,简单易懂易用.在正式开始之前先介绍几个概念,一个一个来. React 元素 是表现为 HTML 元素的 JavaScript 对象,他们并不真实存在于浏览器中.他们最终表现为类似h1, div 或 s

React入门-高清视频

一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了.由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具. ReactJS官网地址:http://facebook.github.io/re

TypeScript(二)使用Webpack搭建环境

学习任何的开发,我们都需要对应的环境:包括TypeScript的编译环境和开发工具.这个章节里面,我们就来完成它们的搭建,后续就可以愉快的来写TypeScript代码了. 一. 环境搭建1.1. TypeScript环境安装已经配置好的环境,大家可以直接下载:https://github.com/coderwhy/HYLearnTS.git在上一个章节中我们说过,TypeScript最终会被编译成JavaScript代码:Image01TypeScript运行流程那么我们必然需要对应的编译环境:

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

(转)React 入门实例教程

作者: 阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非

Android基础入门教程——1.2 开发环境搭建

Android基础入门教程--1.2 开发环境搭建 现在主流的Android开发环境有: ①Eclipse + ADT + SDK ②Android Studio + SDK ③IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的Eclipse,而谷歌宣布不再更新ADT后,并且官网也去掉了集成Android开发环境的Eclipse下载链接,各种现象都表示开发者最后都终将过渡到Android Studio,当然这段过渡时间会很长,但如果你是刚学Android的话建议直接冲And

【REACT NATIVE 跨平台应用开发】环境搭建问题记录&&XCODE7模拟器上COMMAND+R失效的几种替换方法

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2147.html React Native 这里不多介绍,其实就是个跨平台开发原生应用的开源引擎. 更详细的介绍,大家可以搜索"facebook react native" 或 "taobao react native" 附上 React Native 官方网站:http://react