不使用create-react-app,搭建React开发环境

首先

在使用React创建Web应用程序时,我认为通常会使用create-react-app来设置环境。但是,当我们想要自定义webpack配置时,或者当create-react-app安装的react-scripts变得碍事时,我们该如何构建自定义环境呢?为了解答这些疑问,我在这里记录下了React环境配置的方法。

webpack和babel的引入

webpack是一个将多个文件打包成一个的工具,babel是一种工具,可以将使用ES6等新语法编写的JavaScript转换为任何浏览器都可以加载的形式。

我也安装了插件。

mkdir react-env
cd react-env
npm install -D @babel/core @babel/preset-env @babel/preset-react babel-loader file-loader url-loader webpack webpack-cli webpack-dev-server html-webpack-plugin

webpack和babel的配置

我会写一个使用webpack和babel的配置。

webpack的配置

让我们创建一个webpack.config.js文件。

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  devServer: {
    port: 3000,
    contentBase: 'dist'
  },
  resolve: {
    extensions: ['.js', '.jsx']
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        use:{
          loader: 'babel-loader'
        },
        include: path.resolve(__dirname, 'src')
      },
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, 'html/index.html'),

      filename: 'index.html'
    }),
  ]
};

entry属性用于设置要加载的文件。在使用create-react-app创建的应用程序中,它相当于index.js文件。output属性用于设置将与加载的文件相关联的代码整合到哪个文件中。在这里,我们设置它输出到dist文件夹下的bundle.js文件中。

module.exports = {
  ...
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  ...
};

使用webpack-dev-server时,需要设置要引用的文件夹和使用的端口号,以在本地环境中启动应用程序。


module.exports = {
  ...
  devServer: {
    port: 3000,
    contentBase: 'dist'
  },
  ...
}

在模块的规则中,需要设置要应用加载器的文件以及要使用的加载器。在这里,我们设置了将src文件夹中的js和jsx文件使用babel-loader进行转换,将图片文件使用url-loader进行转换。

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        use:{
          loader: 'babel-loader'
        },
        include: path.resolve(__dirname, 'src')
      },
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192
            }
          }
        ]
      }
    ]
  }
  ...
}

可以使用插件来扩展Webpack。这次我们引入了一个用于创建HTML文件的插件。我们需要在html文件夹下的index.html中添加代码来加载通过Webpack生成的bundle.js,并将其输出到output中。

module.exports = {
  ...
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, 'html/index.html'),

      filename: 'index.html'
    }),
  ]
};

巴别塔的设置

在webpack.config.js文件中可以使用bael-loader来进行配置,但在这次中将其切割出来进行配置。

我们来创建一个.babelrc文件。

{
  "presets": [
    "@babel/env",
    "@babel/preset-react"
  ]
}

准备所需的文件夹和文件。

根据webpack配置,需要创建 src/index.js 作为构建的入口文件,构建后的文件将输出到 dist 文件夹中。还需要创建 dist 文件夹下的 html/index.html 文件作为生成的 HTML 文件的基础。

※index.js将在下一个部分中编写。

├── dist
├── html
│   └── index.html
├── package-lock.json
├── package.json
├── src
│   └── index.js
└── webpack.config.js
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>React Test</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

开发React应用程序。

安装所需的模块。

npm install --save react react-dom

在src/index.js中显示”Hello React”。

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

ReactDOM.render(
  <h1>Hello React</h1>,
  document.getElementById('root')
)

设置命令

使用 “npm start” 可以在本地环境中启动 React 应用程序,而使用 “npm run build” 可以构建 React 应用程序。

{
  ...
  "scripts": {
    "start": "webpack-dev-server",
    "build": "webpack --mode production --progress"
  },
  ...
}

最后

如果你能够独自创建React环境,那么你就可以轻松地进行服务器端渲染,而无需使用Next.js。请务必试用一次。

广告
将在 10 秒后关闭
bannerAds