如何为React安装Webpack和Babel 7

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-26 09:13   435   0

当我们使用React时,我们所有人都使用了CRA(create-react-app)。 它是一个了不起的工具。 它让我们只需要关注配置,就可以专注于React。 今天,我们将学习如何为我们的React应用设置Webpack和Babel。

首先,让我们了解Webpack和Babel。

Webpack:

它是一个模块捆绑器,使我们可以将项目文件捆绑到一个文件中。 它需要在根文件夹中有一个webpack.config.js文件。 通过提供入口点信息和输出信息,我们告诉webpack如何与我们的应用程序一起工作。

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' , // relative path
  output: {
    path : path.join(__dirname, 'public' ), // absolute path
    filename: 'bundle.js' // file name
  }
};

入口点是我们的应用程序开始的地方,我们通过提供相对路径值进行设置。 然后output属性告诉webpack在哪里发出它创建的输出以及如何命名这些文件。 我们必须在输出路径属性中给出绝对路径值。

通天塔:

它是一个JavaScript编译器。 Babel本身实际上没有任何功能。 是的,它是一个编译器,但是默认情况下不会编译任何东西。 我们必须添加各种按钮和预设来添加支持特定语言的功能。 您可以通过访问Babel网站进行检查。 在babel网站导航栏部分中,您将找到Try It Out 。 点击它,您将获得一个新窗口。

在左侧窗口中,您可以编写代码,而在右侧窗口中,您将获得编译后的代码。 现在,让我们在左侧窗口中编写一些JSX。

const template = < p > Hello </ p > ;

在右侧窗口中,您将获得JavaScript可理解的编译代码,该代码始终在我们的React应用程序中运行。 在左侧,您会看到一些PRESETS选项,其中某些选项已被选中。 如果您现在取消选择react reacts预置选项,您将看到一个错误,原因是此react-preset负责将我们的JSX语法转换为JavaScript可理解的代码。

在我们的教程中,我们将使用两个预设:

  1. @ babel / preset-env :-帮助babel将ES6,ES7和ES8代码转换为ES5。
  2. @ babel / preset-react :-将JSX转换为JavaScript。

入门:

现在,我们对webpack和babel知之甚少。 让我们深入了解我们的React设置。

  • 使用以下命令创建目录:
mkdir react-setup-tutorial
cd react-setup-tutorial
mkdir public src
touch public/index.html src/app.js
  • 在index.html文件中,添加以下代码。
<!DOCTYPE html>
< html >
  < head >
    < meta charset = "UTF-8" />
    < meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    < meta http-equiv = "X-UA-Compatible" content = "ie=edge" />
    < title > React App </ title > 
  </ head >

  < body >
    < div id = "root" > </ div >

    < script src = "./bundle.js" > </ script >
  </ body >
</ html >
  • 通过运行以下命令初始化项目: npm init -y

安装Webpack和React:

npm install webpack webpack-cli -- save - dev

我们安装了webpack-cli,以便可以在命令行中使用webpack。

我们已经知道webpack在项目目录的根目录中需要webpack.config.js文件。 因此,让我们 使用以下代码 创建 webpack.config.js 文件。

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' ,
  output : {
    path : path.join(__dirname, 'public' ),
    filename : 'bundle.js'
  }
};

接下来在 package.json中 添加webpack命令

"scripts" : {
    "start" : "webpack --mode=development" ,
    "build" : "webpack --mode=production"
  }

Webpack中有两种模式, 开发生产 。 我们可以通过--mode标志来设置。 生产模式会生成可用于生产的优化文件。

安装React:

npm install react react-dom

现在,将react和react-dom导入我们的 app.js 文件中,并添加一些react代码。

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

const template = React.createElement( 'p' , {}, 'Hello from react' );

ReactDOM.render(template, document .getElementById( 'root' ));

现在,在终端中使用以下命令,并 在浏览器中 打开 index.html 文件。

npm start

您的应用运行良好。 但是您有一个疑问,为什么我们不使用JSX。 这次让我们尝试在我们的 app.js 文件中 使用一些JSX代码

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

const template = < p > Hello from react </ p > ;

ReactDOM.render(template, document .getElementById( 'root' ));

现在再次运行我们之前的命令。

npm start

这次您将得到一个错误。 那是因为我们使用JSX,而JavaScript不支持JSX。 因此,如果我们想在应用程序中使用JSX,则需要对其进行编译。 我们可以通过通天塔做到这一点。

安装和配置Babel:

npm install  @ babel/core  @ babel/preset-env  @ babel/preset-react  babel-loader  --save-dev

我们已经知道@ babel / preset-env和@ babel / preset-react。 现在是@ babel / core和babel-loader。

  1. @ babel / core :它允许我们从webpack等工具运行babel。
  2. babel-loader :它是一个webpack插件。 它允许我们教webpack当webpack看到某些文件时如何运行babel。

让我们通过 在项目目录的根目录下 创建一个 .babelrc 文件并在其中包含以下内容来 配置babel

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

该文件将告诉babel哪些预置用于编译代码。

现在是时候教webpack如何将JSX编译为JavaScript代码了。 为此,我们需要使用加载程序。 加载程序让我们自定义webpack在加载某些文件时的行为。 它会通过babel运行某些文件。 为此,我们需要通过对象上的模块属性在webpack.config.js文件中设置加载程序。 模块属性需要一个规则数组,并且一个规则让我们定义了如何使用加载程序。 现在,我们有一个规则来采用JSX并使用babel将其转换为JavaScript。

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' ,
  output : {
    path : path.join(__dirname, 'public' ),
    filename : 'bundle.js'
  },
  module : {
    rules : [
      {
        test : /\.js$/ ,
        exclude : /node_modules/ ,
        loader : 'babel-loader'
      }
    ]
  }
};

在这里,我们设置了一个对象规则,其中loader属性告诉我们要使用哪个加载器,然后使用babel-loader测试我们实际要在哪个文件上运行的文件的测试属性,并希望在以.js结尾的文件上运行它。 exclude属性可排除一组文件,我们使用/ node_modules /,因为我们不想通过这些库运行babel。 现在我们可以在React中使用JSX。 让我们再次运行我们的应用程序。

npm start

这次我们没有任何错误。 在浏览器中打开index.html文件,可以。

配置源地图:

让我们在webpack.config.js文件中添加一些额外的配置设置。

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' ,
  output : {
    path : path.join(__dirname, 'public' ),
    filename : 'bundle.js'
  },
  module : {
    rules : [
      {
        test : /\.js$/ ,
        exclude : /node_modules/ ,
        loader : 'babel-loader'
      }
    ]
  },
  devtool : 'cheap-module-eval-source-map'
};

在这里,我们通过使用devtool属性来设置源地图。 它增强了我们的调试过程。 它用于在调试时显示我们的原始JavaScript,这比缩小代码要容易得多。

安装开发服务器:

在终端中运行以下命令。

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

webpack.config.js 文件中 添加以下代码

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' ,
  output : {
    path : path.join(__dirname, 'public' ),
    filename : 'bundle.js'
  },
  module : {
    rules : [
      {
        test : /\.js$/ ,
        exclude : /node_modules/ ,
        loader : 'babel-loader'
      }
    ]
  },
  devtool : 'cheap-module-eval-source-map' ,
  // changed line
  devServer: {
    contentBase : path.join(__dirname, 'public' )
  }
};

接下来 在package.json中 添加 webpack-dev-server 命令:

"scripts" : {
    "start" : "webpack --mode=development" ,
    "build" : "webpack --mode=production" ,
    "dev-server" : "webpack-dev-server"
  }

现在运行此命令。

npm run  dev-server

它将启动开发服务器。 它为我们提供了可以访问它的输出。 现在,我们将这两种工具集成在一起,开发服务器既是我们的服务器,也是为我们运行的webpack。

现在,我们可以访问突出显示的URL,我们将获得我们的应用程序。

加载样式:

让我们在src目录中创建一个新文件和文件夹。

使用以下命令创建文件和文件夹。

mkdir src/styles
touch src/styles/styles.css

现在,在 styles.css 文件中 添加以下样式

* {
  color : blue;
}

要加载我们的style.css文件,我们需要在webpack.config.js文件中设置新规则。

在此之前,我们需要安装一些新的加载程序。

npm install css-loader style -loader --save-dev
  1. css-loader:允许webpack加载我们的CSS资产。
  2. style-loader:获取CSS并通过注入<style>标签将其添加到DOM中。

现在,在我们的 webpack.config.js 文件中 添加新规则

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' ,
  output : {
    path : path.join(__dirname, 'public' ),
    filename : 'bundle.js'
  },
  module : {
    rules : [
      {
        test : /\.js$/ ,
        exclude : /node_modules/ ,
        loader : 'babel-loader'
      },
      // New rules to load css
      {
        test : /\.css$/ ,
        use : [ 'style-loader' , 'css-loader' ]
      }
    ]
  },
  devtool : 'cheap-module-eval-source-map' ,
  devServer : {
    contentBase : path.join(__dirname, 'public' )
  }
};

在我们的app.js文件中导入style.css并运行dev-server以查看效果。

import React from 'react' ;
import ReactDOM from 'react-dom' ;
import './styles/styles.css' ;

const template = < p > Hello from react </ p > ;

ReactDOM.render(template, document .getElementById( 'root' ));

如果要使用SCSS,则需要安装sass-loader ,这将帮助webpack将sass编译为css。 sass-loader依赖于另一个包node-sass

npm install sass-loader node -sass --save-dev

const path = require ( 'path' );

module .exports = {
  entry : './src/app.js' ,
  output : {
    path : path.join(__dirname, 'public' ),
    filename : 'bundle.js'
  },
  module : {
    rules : [
      {
        test : /\.js$/ ,
        exclude : /node_modules/ ,
        loader : 'babel-loader'
      },
      // Rules to load scss
      {
      // Some change here
        test: /\.scss$/ ,
        use : [ 'style-loader' , 'css-loader' , 'sass-loader' ]
      }
    ]
  },
  devtool : 'cheap-module-eval-source-map' ,
  devServer : {
    contentBase : path.join(__dirname, 'public' )
  }
};

现在改变我们的style.css文件扩展名的.css.scssstyle.scss。

Alos将app.js中的CSS导入更改为:

import './styles/styles.scss' ;

并添加以下样式,以确保我们的Wepback对于SASS正常工作。

$brand-color : blue;

* {
  color : $brand-color ;
}

现在,使用以下命令再次运行dev-server。

npm run  dev-server

然后我们为SASS配置webpack。

而已。 现在我们已经为React配置了Webpack和Babel,可用于创建React项目。 感谢您的阅读和关注。🙂

先前发布在https://dev.to/iamismile/how-to-setup-webpack-and-babel-for-react-59ph

From: https://hackernoon.com/how-to-setup-webpack-and-babel-7-for-react-6xpy3615

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP