首页 > 其他分享 >从0到1搭建一个react项目

从0到1搭建一个react项目

时间:2023-09-11 11:55:45浏览次数:45  
标签:dom 项目 loader react webpack js true 搭建

从0到1搭建一个react项目

react分享 react分享 高级前端工程师    

首先新建一个文件夹, 然后用编辑器vscode打开这个文件夹

打开文件夹后执行npm init命令, 会提示你生成package.json文件

然后下载npm包, 下面贴下package.json

{
  "name": "demo",
  "version": "1.0.0",
  "description": "学习webpack",
  "main": "index.js",
  "scripts": {
    "dev": "npx webpack serve",
    "build": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "webpack"
  ],
  "author": "wwang",
  "license": "ISC",
  "dependencies": {
    "react": "file:react/build/node_modules/react", // 这块大家可能有点疑问, 这是我从github下载的react源码
    "react-dom": "file:react/build/node_modules/react-dom",
    "react-router": "^6.9.0",
    "react-router-dom": "^6.9.0",
  },
  "devDependencies": {
    "webpack": "^5.76.2",
    "webpack-cli": "^5.0.1", // webpack脚手架
    "@babel/cli": "^7.21.0",
    "@babel/core": "^7.21.0",
    "@babel/preset-react": "^7.18.6",
    "css-loader": "^6.7.3",
    "less-loader": "^11.1.0",
    "style-loader": "^3.3.2",
    "clean-webpack-plugin": "^4.0.0", // 清空打包内容
    "html-webpack-plugin": "^5.5.0", // 生成html文件
    "mini-css-extract-plugin": "^2.7.5", // css文件拆分
    "terser-webpack-plugin": "^5.3.7", // 压缩器
    "webpack-bundle-analyzer": "^4.8.0", // 产物分析
    "webpack-dev-server": "^4.11.1" // 本地服务启动
  }
}

package.json依赖包文件下载后, 下面开始配置babel文件, 在项目的根目录下新增babel.config.js

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

最后一步, 配置webpack.config.js

const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const miniCssExtractPlugin = require('mini-css-extract-plugin');
const Analyzer = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
    entry: {
        index: {
            import: './src/index.js',
            dependOn: ['react', 'react-dom', 'react-router-dom'] // 依赖包抽离
        },
        react: ['react'],
        'react-dom': ['react-dom'],
        'react-router-dom': ['react-router-dom'],
    },
    watch: false,
    output: {
        path: path.join(__dirname, './dist'),
        filename: '[name].[chunkhash].js', // 默认配置文件绝对路径 + /dist 作为最终的输出文件路径
        publicPath: '/',
        asyncChunks: true,
        chunkFilename: `[name].[contenthash:8].async.js`
    },
    mode: 'development',
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        exclude: /node_modules/gi,
                        cacheDirectory: true
                    }
                }
            },
            {
                test: /\.(less)$/,
                use: [miniCssExtractPlugin.loader, 'css-loader', 'less-loader'],
                include: /src/
            },
        ],
    },
    optimization: {
        chunkIds: 'deterministic',
        minimize: true,
        minimizer: [
            new TerserPlugin({
                terserOptions: {
                    format: {
                        comments: false,
                        max_line_len: true, // 最大行长度(用于缩小的代码), 用于自动换行
                        beautify: true, // 美化输出
                        ascii_only: true,
                        preserve_annotations: true
                    },
                },
                extractComments: false
            }),
        ],
        splitChunks: {
            chunks: 'all',
        }
    },
    resolve: {
        extensions: ['.js', '.json', '.jsx'],
    },
    plugins: [
        new htmlWebpackPlugin(),
        new CleanWebpackPlugin(),
        new miniCssExtractPlugin({
            filename: '[name].[contenthash:8].css',
            chunkFilename: '[name].[contenthash:8].chunk.css'
        }),
        new Analyzer()
    ],
    devServer: {
        server: 'http',
        static: {
            directory: path.join(__dirname, '/'),
            watch: {
                ignored: '*.jsx',
                usePolling: false,
            },
            serveIndex: true
        },
        allowedHosts: ['.host.com'],
        port: '9000',
        hot: true,
        historyApiFallback: true
    },
};

下面就可以在工程里新建页面, 配置陆游进行愉快的玩耍了

大家对配置项不懂的可以私聊我, 后续再讲解下webpack怎么根据react路由来进行拆分, 如何调试react源码

编辑于 2023-03-22 14:11・IP 属地江苏

标签:dom,项目,loader,react,webpack,js,true,搭建
From: https://www.cnblogs.com/sexintercourse/p/17693162.html

相关文章

  • Python项目打包与部署(一):模块与包的概念与关系
    当前各类Python教程鲜有涉及Python打包与部署技术,或者讲述过于表面化、片面化。本人尝试从原理开始,结合实例,并给出标准操作步骤建议,为python编程爱好者提供一份较为详实的Python项目打包与部署参考教程。本教程其它章节Python项目打包与部署(二):init.py的作用及内容Python......
  • Python从零到一构建项目​
    Python从零到一构建项目随着互联网的发展,网络上的信息量急剧增长,而获取、整理和分析这些信息对于很多人来说是一项艰巨的任务。而Python作为一种功能强大的编程语言,它的爬虫能力使得我们能够自动化地从网页中获取数据,大大提高了效率。本文将分享如何从零到一构建一个简单的网络爬虫......
  • 1.blackview_readme(项目一)
    //F盘url.txt文件现在有几个链接,现在需要python程序爬取文件中所有链接的网页源码,并在这些网页源码中筛选包含/products/item/的链接,按字母或数字排序,去重后分别新建txt文件存储在F盘上。https://www.blackview.hk/一、我现在想用python程序获取https://www.blackview.hk/这个url......
  • 嵌入式面经_20届师兄谈笔试_八股文_简历_项目经验分享
    嵌入式面经_20届师兄谈笔试_八股文_简历_项目经验分享111道嵌入式面试题答案汇总专栏链接-->《嵌入式/C++面试题解析大全》1、个人经历本人2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业嵌入式/安卓开发经验,谈谈一些感想。2023都说前端后台卷死,相较2......
  • 用OLED屏幕播放视频(1): 项目介绍
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这篇文章主要对项目的实现做整体的介绍,包括硬件的需求,最终实现的视频播放效果,以及软件的实现思路.1).硬件需求beagleboneblack......
  • vue项目成功引入element组件的具体步骤
    1、首先要确保vue项目能够成功在浏览器访问2、一般使用的是vue3那么,需要注意的是,element组件在vue3里面,需要使用的是element-plus命令:npminstallelement-plus--save--legacy-peer-deps下载完成之后,需要在main.js里面对element组件进行引入:importElementPlusfrom'ele......
  • 运行vue项目一直报错的问题的解决
    问题描述(上图为网图,自己的没来得及截图)问题解决第一个原因:vue版本过低;使用下面的语句进行版本升级:[email protected]但是我试了没啥用;第二个原因:node版本过低;使用下面的语句进行版本升级:--若是已经有更高级的版本,可以直接更换:nvmlistnvmuse版本--若是没有,就自己......
  • 2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算
    2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」(编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_skills......
  • 2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算
    2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」(编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_sk......
  • Vue进阶(幺陆柒):Vue 项目调试技能
    (文章目录)一、前言在Vue项目开发过程中,当遇到应用逻辑出现错误,但又无法准确定位的时候,知晓Vue项目调试技巧至关重要。同后台项目开发一样,可以在JS实现的应用逻辑中设置断点,并进行单步、进入方法内、跳出方法等调试,从而准确定位问题根源。本文主要讲解针对JetBrains系列WebStor......