美文网首页
从头开始构建一个自己的react项目

从头开始构建一个自己的react项目

作者: 金逸凌云 | 来源:发表于2017-11-10 15:45 被阅读64次

原文链接:https://www.robinwieruch.de/minimal-react-webpack-babel-setup/
本文对原文进行了粗略的翻译~~旨在帮助刚入门的新手迅速了解构建一个基于webpack打包的react项目。

Project setup 配置项目

1.首先使用下面的命令来创建一个项目:

mkdir minimal-react-boilerplate 
cd minimal-react-boilerplate 
npm init -y

npm init 会生成一个package.json文件,-y命令则是所有的选项都用默认选项.

2.创建一个分布式(?)文件夹,该文件夹用来为单页应用(SPA)服务,使得应用可以在浏览器环境或者外部服务器被访问到。该文件夹会包括两个文件:一个html和一个js,js会由webpack配置好的js资源来自动生成,你可以手动创建一个html文件作为应用的入口。

注释:这个html和js就是你程序发布的所有内容了。

html的内容如下所示:

<!DOCTYPE html>
<html>
  <head>
      <title>The Minimal React Webpack Babel Setup</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="bundle.js"></script>
  </body>
</html>

说明两点:

  • bundle.js会被webpack生成,

  • id=“app”会作为react根节点来找到入口的标识。

接下来要做的就是把所有的资源文件打包成一个bundle.js,创建一个根组件将id=“app”作为文件的入口

Webpack Setup 配置webpack

使用webpack来打包,为了能在localhost环境访问到,并在浏览器里开发,需要同时安装webpack-dev-server,才能启动服务器。

npm install --save-dev webpack webpack-dev-server

现在你应该有node_modules文件夹,这里你可以看到你安装的第三方依赖,因为使用了--save-dev,这些依赖会被写在package.json文件中。

接下来在package.json中配置webpack-dev-server的运行

"scripts":{

    "start":"webpack-dev-server --progress --colors --hot --config ./webpack.config.js",

     ...

},

这个运行脚本定义了你需要使用一些基本的配置来使用webpack-dev-server,需要创建配置文件webpack.config.js

module.exports = {
    entry: ['./src/index.js'],
    output: { 
      path:__dirname + '/dist', 
      publicPath: '/',
      filename: 'bundle.js'
    },
   devServer: {
      contentBase: './dist'
   }
};

简单的说这个配置文件做了三件事:

  • 1.我们使用src/index.js来做为打包的入口文件

  • 2.打包后的文件是bundle.js

  • 3.bundle.js生成在dist文件夹下,dist文件夹被用来启动我们的app

我们的项目里还少了一个src/index.js文件,因为它是我们的entry文件么~remember
在src/index.js中输入
The Minimal React Webpack Babel Setup
现在你的项目结构是这样的

- dist
-- index.html
- node_modules
- src
-- index.js
- package.json
- webpack.config.js

接下来就可以运行你的webpack-dev-server了,

通过当前目录下(你项目所在的目录)启动命令行 ,运行项目
npm start

image.png
就可以看到项目已经运行成功了,这时候在浏览器中键入你的localhost地址,如图中,我的运行端口是8081;(一般情况是8080,当被占用时会往后增加)
http://localhost:8081
就可以在浏览器的控制台console.log()中看到你写入的文字了~
现在你通过webpack来运行了你的项目,把你的入口文件src/index.js打包成了bundle.js,然后将它引入到了dist/index.html,最后你就可以在console.log中看到你想要的结果了。
虽然目前只有src/index.js被打包了,但是你肯定会在index.js中引入更多的js,这些都会被webpack自动打包到bundle.js中。赞不赞?

Hot Reloading 热加载

react-hot-loader是非常值得推荐给你的,它会大大缩短你开发到看到效果的时间,简单的说,热加载的作用就是当你修改了一部分源代码,这个变化会立刻表现在浏览器上,而无需通过你刷新整个页面。
在根目录安装
npm install --save-dev react-hot-loader
提示:在命令行,按control+c可以取消npm start的运行,然后安装完成后需要再次运行npm start
想要热加载生效,我们还需要在webpack.config.js这个配置文件增加一些配置。

module.exports = {
  entry: [
     'webpack-dev-server?http://localhost:8081', // 你的应该是8080
    'webpack/hot/only-dev-server',
    './src/index.js',
  ], 
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist',
    hot: true
  }
}

同时在src/index.js文件里还需定义热加载是可以使用的并且需要被使用。
src/index.js文件的内容:

console.log('My Minimal React Webpack Babel Setup');
module.hot.accept();

重新跑一下npm start,webpack的配置文件修改了是需要重新启动的。
运行后你又可以在浏览器的控制台里看到console.log()的内容了,同时还能看到一些与热加载有关的打印,不用去看它们。先来试试我们的热加载好了没,当你修改你的console.log()内容后,保存,看看浏览器是不是自己更新了,恭喜~~
到这里webpack的基本配置已经好了,但是还少了一个重要的模块——Babel

Babel Setup 配置babel

Babel可以使你尽情的使用es6的语法,使用Babel你的代码会被编译成es5,这样的话所有的浏览器,可能只支持部分的es6,也可以支持你的代码。Babel甚至还允许你使用比es6还先进的语法下一代eses7
打开命令行,让我们赶紧使用吧
npm install --save-dev babel-core babel-loader babel-preset-es2015
此外你可能还想使用一些在试验阶段的es6特性(比如对象扩展符{...}),这些可以通过stages来激活。不用担心它的稳定性,因为已经被Facebook用来在create-react-app中使用了。
怎么使用stages?
npm install --save-dev babel-preset-stage-2
最后一步,鉴于你是要用react的,你需要多一些配置来把react的jsx文件转换成js文件,这是为了方便。
npm install --save-dev babel-preset-react
现在所有的node包都已经安装到位,你接下来还需修改一下package.json和webpack.config.js文件,这些变化包括你所有安装的包。
package.json中

...
"keywords": [],
"author": "",
"license": "ISC",
"babel": {
  "presets": [
    "es2015",
    "react",
    "stage-2"
  ]
},
"devDependencies": {
...

webpack.config.js中

module.exports = {
  entry: [
    'webpack-dev-server/client?http://localhost:8080',
    'webpack/hot/only-dev-server',
    './src/index.js'
  ],
  module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'react-hot-loader!babel-loader'
    }]
  },
  resolve: {
    extensions: ['*', '.js', '.jsx']
  },
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist',
    hot: true
  }
};

对module模块中的loaders是个数组,表示不同的加载器,test是要匹配的文件后缀为.jsx,exclude是把node_modules排除在外。具体内容本篇文件并未详述。

在此时运行npm start 将会报错,因为你的应用还不识别react。
因为我们马上就要进行第一个react组件的开发了,让我们来修复下~

React Setup 使用React

为了使用react,你还需要安装两个node包,react和react-dom,这两个安装完后npm start 也不会报错了
npm install --save react react-dom
然后在src/index.js中编写你的链接react的第一个组件吧
src/index.js中

import React from 'react';
import ReactDOM from 'react-dom';

const title = 'My Minimal React Webpack Babel Setup';

ReactDOM.render(
  <div>{title}</div>,
  document.getElementById('app')
);

module.hot.accept();

到今天,不得不说这篇文章已经过时了,因为react和各种node包的版本更新速度太快,这个项目已经跑不起来,如果非要跑起来,可以安装历史版本

npm install react-hot-loader@1.3.1 --save-dev
npm install react@15.3.0 --save-dev
npm install react-dom@15.0.2 --save-dev

所以从今天开始还是要多写博客,多总结,以后再回头看,自己应该有了长足的进步吧,以前写的文章该有多~~
到这里,打开浏览器应该就可以看到页面上输出了内容,而不是再在控制台上了
至此,一个迷你型的react项目就搭建完成了。

相关文章

网友评论

      本文标题:从头开始构建一个自己的react项目

      本文链接:https://www.haomeiwen.com/subject/jaavmxtx.html