react.js使用webpack搭配环境的入门教程


Posted in Javascript onAugust 14, 2017

本文介绍了react.js使用webpack搭配环境的入门教程,分享给大家,也给自己做个笔记

如果你想直接上手开发,而跳过这些搭配环境的繁琐过程,推荐你使用官方的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,看到以下输出运行成功:

react.js使用webpack搭配环境的入门教程

三、添加热替换模块

项目已经可以运行了,但是每次输完代码都要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

react.js使用webpack搭配环境的入门教程

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

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

重新运行npm run dev:

 react.js使用webpack搭配环境的入门教程

修改app/components/Hello.jsx

react.js使用webpack搭配环境的入门教程 

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

react.js使用webpack搭配环境的入门教程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery ui css framework
Jun 28 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
Nov 19 Javascript
jQuery在iframe中无法弹出对话框的解决方法
Jan 12 Javascript
JavaScript中的DSL元编程介绍
Mar 15 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
Oct 14 Javascript
Js与Jq获取浏览器和对象值的方法
Mar 18 Javascript
Bootstrap项目实战之子栏目资讯内容
Apr 25 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 16 Javascript
js实现经典贪吃蛇小游戏
Mar 19 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 Javascript
JS原生数据双向绑定实现代码
Aug 14 #Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 #jQuery
关于在mongoose中填充外键的方法详解
Aug 14 #Javascript
JavaScript变量类型以及变量作用域详解
Aug 14 #Javascript
jQuery:unbind方法的使用详解
Aug 14 #jQuery
通过V8源码看一个关于JS数组排序的诡异问题
Aug 14 #Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 #Javascript
You might like
解析PHP中ob_start()函数的用法
2013/06/24 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
纯js分页代码(简洁实用)
2013/11/05 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
Python实现测试磁盘性能的方法
2015/03/12 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python之列表实现栈的工作功能
2019/01/28 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
计算机专业毕业生求职信
2014/04/30 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
初三语文教学计划
2015/01/22 职场文书
区域经理岗位职责
2015/02/02 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python