欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webpack5搭建一個簡易的react腳手架項目實踐

 更新時間:2022年05月09日 09:45:50   作者:進(jìn)擊的cks  
本文文章主要介紹了webpack5搭建一個簡易的react腳手架項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項目初始化

首先我們創(chuàng)建一個目錄,初始化 npm,得到一個package.json文件。

mkdir react-cli
cd react-cli
npm init -y

安裝webpack

安裝webpack和相關(guān)依賴。webpack-dev-server是開啟開發(fā)環(huán)境的服務(wù),webpack-merge是合并公共配置文件。

npm install webpack webpack-cli webpack-dev-server webpack-merge -D

這個時候得到以下結(jié)構(gòu)

 react-cli
  |- node_modules
  |- package.json
  |- package-lock.json

搭建腳手架目錄結(jié)構(gòu)

現(xiàn)在,我們將創(chuàng)建以下目錄結(jié)構(gòu)、文件和內(nèi)容:

 react-cli
  |- node_modules
  |- package.json
  |- package-lock.json
+ |- public
+   |- index.html        //入口文件
+ |- src
+   |- App.js
+   |- index.css    
+   |- App.scss           //測試sass
+   |- index.js
+ |- webpack.common.js    //開發(fā)和生產(chǎn)環(huán)境的公共配置
+ |- webpack.prod.js      //開發(fā)環(huán)境的配置
+ |- webpack.dev.js       //生產(chǎn)環(huán)境的配置   

public的index.html的內(nèi)容如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>react-cli</title>
</head>
<body>
  <div id="root"></div>
</body>
</html>

src的index.js的內(nèi)容如下:

const root = document.getElementById("root");
root.innerHTML = "cks";

開啟本地服務(wù)

我們先安裝html-webpack-plugin。該插件將為你生成一個 HTML5 文件, 在 body 中使用 script 標(biāo)簽引入你所有 webpack 生成的 bundle

npm i html-webpack-plugin -D
復(fù)制代碼

webpack.common.js的公共配置如下:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
  entry: {
    index: "./src/index.js",
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./public/index.html"
    })
  ],
  output: {
    filename: "[name].bundle.js",
    path: path.resolve(__dirname, "dist"),
  }
};

webpack.dev.js的配置如下,我們使用webpack-merge進(jìn)行合并公共配置:

const { merge } = require("webpack-merge");
const baseConfig = require("./webpack.common.js");
module.exports = merge(baseConfig, {
  mode: "development",   //開發(fā)環(huán)境
  devtool: "inline-source-map"  //可以查看代碼報錯的位置
});

修改package.json文件,加上dev命令。

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --config webpack.dev.js"
  },

然后控制臺npm run dev回車,打開http://localhost:8080 ,如果頁面出現(xiàn)cks證明開啟本地服務(wù)成功,更多詳細(xì)配置查看webpack官網(wǎng) webpack.docschina.org/guides/

配置css&sass

我們安裝樣式文件相關(guān)的loader,在webpack 5 中,可以使用內(nèi)置的Asset Modules處理圖像和字體,我們不用額外安裝。

npm install --save-dev style-loader css-loader sass sass-loader

修改webpack.commmon.js文件:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
  entry: {
    index: "./src/index.js",
  },
  module: {
    rules: [
      {
        test: /css$/i,    //匹配css、scss文件
        use: ["style-loader", "css-loader", "sass-loader"] // 注意執(zhí)行順序是后往前
      },
      {
        test: /.(png|jpg|jpeg|svg|gif)$/i,
        type: "asset/resource"
      },
      {
        test: /.(woff|woff2|eot|ttf|otf)$/i,
        type: "asset/resource"
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./public/index.html"
    })
  ],
  output: {
    filename: "[name].bundle.js",
    path: path.resolve(__dirname, "dist"),
  }
};

這樣css和sass的樣式文件就能使用了。

安裝react的相關(guān)依賴

我們要在生產(chǎn)環(huán)境安裝react和react-dom,因為react的編譯依賴babel,我們也安裝babel相關(guān)的依賴。babel主要是以下這些:

  • "babel-loader": 轉(zhuǎn)義 js 文件代碼的 loader
  • "@babel/core": babel 核心庫
  • "@babel/preset-env": ES6轉(zhuǎn)ES5
  • "@babel/preset-react": 轉(zhuǎn)換 JSX 為函數(shù)
npm install --save react react-dom
npm install babel-loader @babel/core @babel/preset-env @babel/preset-react -D

修改webpack.common.js文件,添加babel的loader,當(dāng)然也可以使用配置文件.babelrc的形式。

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
  entry: {
    index: "./src/index.js",
  },
  resolve: {
    extensions: [".js", ".json", ".jsx"],
  },
  module: {
    rules: [
      {
        test: /css$/i,
        use: ["style-loader", "css-loader", "sass-loader"] // 注意執(zhí)行順序是后往前
      },
      {
        test: /.(png|jpg|jpeg|svg|gif)$/i,
        type: "asset/resource"
      },
      {
        test: /.(woff|woff2|eot|ttf|otf)$/i,
        type: "asset/resource"
      },
      {
        test: /\.js|jsx$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-env", "@babel/preset-react"]
          }
        }
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./public/index.html"
    })
  ],
  output: {
    filename: "[name].bundle.js",
    path: path.resolve(__dirname, "dist"),
  }
};

然后我們在src的index.js中導(dǎo)入的App組件,將組件渲染到頁面。因為我是安裝的是React18, React 18 不再支持 ReactDOM.render,改用 createRoot。更多請查看reactjs.org/link/switch…, 我們修改index.js的代碼為:

import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container); // createRoot(container!) if you use TypeScript
root.render(<App />);

瀏覽器打開http://localhost:8080/ 得到以下內(nèi)容證明添加react成功了。

項目添加熱更新

HMR 全稱為 Hot Module Replacement ,中文意思為熱模塊替換。是 webpack 提供的最有用的功能之一。它允許在運行時替換,添加,刪除各種模塊,而無需進(jìn)行完全刷新重新加載整個頁面。從 webpack-dev-server v4.0.0 開始,熱模塊替換是默認(rèn)開啟的。如下開啟熱模塊替換:

  devServer: {
     hot: true,
  }

上面那個是默認(rèn)開啟的,我們就不配置了,但是設(shè)置那個只是樣式文件進(jìn)行了熱更新,我們的jsx或者js修改還是重新刷新的。所以我們要修改src的index.js文件進(jìn)行react的熱更新。

import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container); // createRoot(container!) if you use TypeScript
root.render(<App />);

// 如果啟動webpack熱更新,則會執(zhí)行一下代碼
if (module.hot) {
  module.hot.accept("./App.js", () => {
    const NextApp = require("./App.js").default;
    // 再次掛在到dom元素上
    root.render(<NextApp />)
  })
}

生產(chǎn)環(huán)境打包

我們?yōu)閣ebpack.prod.js添加以下代碼進(jìn)行簡單打包。更多打包優(yōu)化查看webpack.docschina.org/guides/

const { merge } = require("webpack-merge");
const baseConfig = require("./webpack.common.js");
module.exports = merge(baseConfig, {
  mode: "development",   //開啟生產(chǎn)環(huán)境
  output: {
    clean: true   // webpack5的新特性,在生成文件之前清空 output 目錄
  }
});

同時修改package.json文件代碼,添加打包命令:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --config webpack.dev.js",
    "build": "webpack --config webpack.prod.js"
  }

然后npm run build打包。

總結(jié)

以上就是webpack5搭建一個簡易的react腳手架項目的大概流程,并總結(jié)一些webpack5的新特性,后面我將總結(jié)一下webpack的打包優(yōu)化。

項目地址:https://gitee.com/chen-kangsen/react-cli

到此這篇關(guān)于webpack5搭建一個簡易的react腳手架項目實踐的文章就介紹到這了,更多相關(guān)webpack5搭建react腳手架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解js的視頻和音頻采集

    詳解js的視頻和音頻采集

    這篇文章給大家講述了關(guān)于js的視頻和音頻采集的相關(guān)知識點內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • input的focus方法使用

    input的focus方法使用

    input有個focus方法,今天發(fā)現(xiàn)就在onblur事件里面起作用,onchang等事件中根本不起作用的
    2010-03-03
  • js方塊躲避游戲代碼

    js方塊躲避游戲代碼

    鼠標(biāo)控制,空色方塊不要讓藍(lán)色方塊碰到就可以,看能玩多久,是個javascript不錯的一個游戲啊,想用js寫游戲的朋友可以參考下,看代碼應(yīng)該是國外的人寫的
    2008-05-05
  • js實現(xiàn)文章文字大小字號功能完整實例

    js實現(xiàn)文章文字大小字號功能完整實例

    這篇文章主要介紹了js實現(xiàn)文章文字大小字號功能的實現(xiàn)方法,可根據(jù)用戶習(xí)慣調(diào)整顯示文字的大小.詳細(xì)講述了實現(xiàn)這一功能的完整步驟.是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • JS事件處理機制及事件代理(事件委托)實例詳解

    JS事件處理機制及事件代理(事件委托)實例詳解

    這篇文章主要介紹了JS事件處理機制及事件代理,結(jié)合實例形式詳細(xì)分析了JS時間處理機制與事件代理功能、用法及相關(guān)使用技巧,需要的朋友可以參考下
    2023-06-06
  • javascript中setTimeout使用指南

    javascript中setTimeout使用指南

    本文給大家通過3個方法向大家展示了javascript中的setTimeout的使用,非常的簡單,有需要的小伙伴可以參考下。
    2015-07-07
  • 細(xì)數(shù)JavaScript 一個等號,兩個等號,三個等號的區(qū)別

    細(xì)數(shù)JavaScript 一個等號,兩個等號,三個等號的區(qū)別

    下面小編就為大家?guī)硪黄?xì)數(shù)JavaScript 一個等號,兩個等號,三個等號的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效

    JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效

    這篇文章主要給大家介紹了關(guān)于JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用js實現(xiàn)瀑布流效果

    使用js實現(xiàn)瀑布流效果

    這篇文章主要為大家詳細(xì)介紹了使用js實現(xiàn)瀑布流效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • js表頭排序?qū)崿F(xiàn)方法

    js表頭排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了js表頭排序?qū)崿F(xiàn)方法,涉及數(shù)字、字母、字符串比較及排序等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01

最新評論