zoukankan      html  css  js  c++  java
  • webpack 搭建React(手动搭建)

    前言

         最近真的都是在瞎学,看到自己不是很明白的东西,都喜欢自己手动去敲1到3遍(晚上下班的时候咯),

    瞧,React  基于webpack 搭建,react 官方有一套手脚架工具,我自己也搭建过确实挺好使的,适合初学者学习学习。

    但是自己还是想手动来搭建,嗯 于是写一篇不用手脚架搭建的博客,供自己加强记忆,哈哈哈 开始咯

    创建项目目录

       新建 react-webpack 项目

        cd react-webpack

    初始化 npm 环境

       npm init   //一路回车

      package.json 文件下 其实就是记录依赖相关的 加载库

    {
      "name": "react-webpack",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1"
      },
      "author": "yf",
      "license": "ISC"
    }

    依赖安装

          npm i  react -D

          npm i   react-dom -D

          npm i  webpack  -D

          npm  i  webpack-cli -D  (因为webpak 到 4版本以上 就需要这个 ,不然会报错)

    创建目录

        创建 src ,build 2个目录

         在 src 下创建 webpack 打包入口文件   index.js

        在创建webpack 配置文件

    const path = require('path') // 引入‘path’,为了在这里使用绝对路径,避免相对路径在不同系统时出现不必要的问题
    const publicPath = '/';
    
    module.exports = {
        // 应用入口
        entry: {
            app: path.join(__dirname, '../src/index.js') // index.js作为打包的入口
        },
        // 输出目录
        output: {
            filename: '[name].[hash:8].js',//name代表entry对应的名字; hash代表 整个app打包完成后根据内容加上hash。一旦整个文件内容变更,hash就会变化
            path: path.join(__dirname, '../dist'), // 打包好之后的输出路径
            publicPath: publicPath,  //态资源文件引用时的路径
        },
    };

    修改package.json 下

        添加如下代码:

        "build": "webpack --mode production"

    需要引入 babel-loader 来编译 es6

    npm i babel-core babel-loader babel-preset-env -D   

    npm install babel babel-cli  -D      

    npm install babel-preset-react  babel-preset-es2015 -D

    {
                    test: /.(js|jsx)$/, //使用loader的目标文件。这里是.js
                    use: {
                        loader: 'babel-loader',
                        options: {
                            presets: ["env", "react"] //['@babel/preset-react']
                        },
                    },
                    exclude: [
                        path.join(__dirname, '../node_modules') // 由于node_modules都是编译过的文件,这里我们不让babel去处理其下面的js文件
                    ]
       },

    在项目根目录下创建 babel 的配置文件 .babelrc:

    {
      "presets": [
        ["es2015", {"loose": true}],
        "react"
      ]
    }

    执行 npm run build 

     你的第一个打包就在dist 文件下了 

       在使用   html-webpack-plugin 

      webpack  可以根据你的配置生成你想要的文件 html

        npm  i   html-webpack-plugin - D

     

    const HTMLPlugin = require('html-webpack-plugin')
    
    plugins: [
            new HTMLPlugin({
                filename: 'index.html', //制定的文件,默认
                template:'index.html' //制定html生成使用的模板文件 
            }) // 生成一个html页面,同时在webpack编译的时候。把我们所生成的entry都注入到这个html页面中,路径都是根据我们output配置的来走的。
    
      
        ]

     在 你的 index.html ,写这样

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="app"></div>
    </body>
    </html>

    写第一个 React 应用

    import React from 'react';
    import ReactDOM from 'react-dom';
    
    export default class HelloReact extends React.Component{
      constructor(props) {
        super(props);
      }
    
      render(){
        return( <div>Hello  React</div>);
      }
    }
    
    
    ReactDOM.render(<HelloReact />, document.getElementById('app'));

    development 模式下启动服务器并实时刷新 webpack-dev-server

     npm i webpack-dev-server --save-dev

       "start": "webpack-dev-server --mode development --open",
        "build": "webpack --mode development --config build/webpack.config.js"

    在index.js 文件下引入

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <title>Hello React</title>
      </head>
      <body>
        <div id="root"></div>
        <script type="text/javascript" src="./main.e09b122c.js"></script>
      </body>
    </html>

    然后再编译: npm run build  

                           npm run start

    用浏览器打开 //http://localhost:8080,就可以看到 Hello React 出现了

  • 相关阅读:
    C++Vector使用方法
    Struts2学习笔记1
    全排列算法及实现
    概率图模型(PGM)学习笔记(三)模式判断与概率图流
    SQLite的SQL语法
    马云入股恒大背后暗藏四大隐情?
    ListView的优化
    通过WriteProcessMemory改写进程的内存
    “富豪相亲大会”究竟迷失了什么?
    Java实现 蓝桥杯VIP 算法提高 密码锁
  • 原文地址:https://www.cnblogs.com/yf-html/p/9271368.html
Copyright © 2011-2022 走看看