美文网首页
从头开始构建一个自己的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