前端从零搭建自己的脚手架

06-27 1190阅读

目录

一、什么是脚手架

二、项目的创建

1、包管理工具

2、初始化

3、构建项目的基本结构

4、引入react

5、引入typescript

6、webpack配置

7、文件别名

8、引入less、sass、stylus

三、webpack构建速度优化

1、webpack进度条

2、构建耗时

3、开启持久化存储缓存:

4、开启多线程loader

四、webpack构建产物优化

1、bundle体积分析工具

2、样式提取

3、tree-shaking清理未引用的js

4、tree-shaking清理未引用的css

5、资源懒加载

6、资源预加载

7、gzip压缩

总结:


一、什么是脚手架

        Webpack脚手架是一个工具,用于快速搭建基于Webpack的项目结构。它通常包括了一些预设的配置和插件,以便用户可以快速开始一个新的项目,而不必从头开始配置Webpack。这些脚手架可以帮助开发人员自动处理诸如打包、代码转译、资源管理等繁琐的任务,从而让他们更专注于项目的逻辑实现。

二、项目的创建

1、包管理工具

  • npm(Node Package Manager)是 Node.js 的默认包管理器,可以用于安装、更新和删除 JavaScript 包。

  • yarn 是另一个流行的包管理器,由 Facebook 开发。它旨在解决 npm 的一些限制和一些性能安全问题,并且通常比 npm 更快速、稳定。

  • pnpm 是另一个包管理器,它通过重用文件系统硬链接以及共享依赖来显著减少磁盘空间占用。相比于传统的 npm 和 yarn,pnpm 在安装包时只保存一个拷贝,因此在大型项目中能够节省大量的磁盘空间。

    此次项目中我们使用pnpm。

    相关资料:pnpm基本使用

    2、初始化

    新建一个文件夹,然后在根目录打开终端并输入以下命令:

    pnpm - v # 初始化 package . json 文件 pnpm init

    初始化后会在根目录生成一个package.json 文件:

    package.json文件在Webpack中扮演了重要的角色。它用于描述项目的依赖项信息和定义的依赖项,并且可以利用package.json中的脚本命令来执行构建任务。

    前端从零搭建自己的脚手架

    3、构建项目的基本结构

    ├── build
    | ├── webpack.base.ts # 公共配置
    | ├── webpack.dev.ts # 开发环境配置
    | └── webpack.prod.ts # 打包环境配置
    ├── public
    │ └── index.html # html模板
    ├── src
    | ├── App.tsx
    | ├── App.css
    │ └── index.tsx # react应用入口页面
    └── package.json

    index.html先添加一个节点:

        
        
    

    4、引入react

    我们先简单了解一下什么是react:

            React 是一个用于构建用户界面的 JS 库。它通过组件化的方式让开发者可以轻松地构建交互式的用户界面。React 使用虚拟 DOM 技术,这使得页面在更新时能够更加高效地进行渲染。通过使用 JSX 语法,React 允许开发者将 HTML 结构和 JavaScript 代码结合起来。

    安装react依赖:

    pnpm i react react - dom # 声明依赖 pnpm i @ types / react @ types / react - dom - D

    在src/index.tsx中编写入口文件:

    import React from 'react';
    import { createRoot } from 'react-dom/client';
    import App from './App';
    const root = document.querySelector('#root')
    if(root) {
        createRoot(root).render()
    }

    在App.css写一个简单的样式:

    h2 {
        color:red;
    }

    以及App.tsx

    import React from 'react'
    import './App.css'
    function App() {
        return 

    你好,蒙面大婶

    } export default App

    5、引入typescript

    简单了解一下什么是typescript(ts):

            TypeScript是一种由微软开发的开源编程语言。TypeScript通过添加静态类型、接口、类和其他高级结构来扩展JavaScript,从而使得在大型项目中更易于维护和阅读。它最终会被编译成纯粹的JavaScript,可以在任何支持JavaScript的地方运行。TypeScript的主要优势之一是提供了更强大的工具和功能,以帮助程序员在开发过程中尽早发现和修复错误。

    在终端输入以下命令安装ts:

    pnpm i typescript - D pnpm i babel - loader ts - node @ babel / core @ babel / preset - react @ babel / preset-typescript @ babel / preset - env core - js - D 初始化 tsconfig.json : npx tsc -- init

    6、webpack配置

    简单了解一下什么是webpack:

            webpack 是一个流行的开源前端模块打包工具,它通过将各种静态资源(如JavaScript、CSS、HTML、图片等)视为模块以及其它的一 些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并基于这些模块生成优化后的静态文件(通常是一个或多bundle)。这些bundle可以被浏览器直接使用,从而提高网页的加载速度和运行效率。

    在终端输入以下命令安装依赖:

    pnpm i webpack webpack - cli - D pnpm i @ types / node - D

    因为需要引入css文件,所以还需要安装相关的loader:

    pnpm i style - loader css - loader html - webpack - plugin - D

    loader:在Webpack中,loader是用于转换非JavaScript文件(如CSS、图片、字体等)为模块的工具。

    配置webpack.base.ts:

    import { Configuration } from "webpack";
    import HtmlWebpackPlugin from "html-webpack-plugin";
    const path = require("path");
    const baseConfig: Configuration = {
        entry: path.join(__dirname, "../src/index.tsx"), // 入口文件
        // 打包出口文件
        output: {
            filename: "static/js/[name].js", // 每个输出js的名称
            path: path.join(__dirname, "../dist"), // 打包结果输出路径
            clean: true, // webpack4需要配置clean-webpack-plugin来删除dist文件,webpack5内置了
            publicPath: "/", // 打包后文件的公共前缀路径
        },
        // loader 配置
        module: {
            rules: [
                {
                    test: /.(ts|tsx)$/, // 匹配.ts, tsx文件
                    use: "babel-loader"
                },
                {
                    test: /.css$/, //匹配 css 文件
                    use: ["style-loader", "css-loader"],
                },
            ],
        },
        resolve: {
            extensions: [".tsx", ".ts", ".jsx", ".js"],
        },
        // plugins
        plugins: [
            new HtmlWebpackPlugin({
                // 复制 'index.html' 文件,并自动引入打包输出的所有资源(js/css)
                template: path.join(__dirname, "../public/index.html"),
                // 压缩html资源
                minify: {
                    collapseWhitespace: true, //去空格
                    removeComments: true, // 去注释
                },
            }),
        ],
    };
    export default baseConfig;
    
    在根目录新建 babel.config.js ,并输入以下内容:
    module.exports = {
        // 执行顺序由右往左,所以先处理ts,再处理jsx,最后再试一下babel转换为低版本语法
        presets: [
            [
                "@babel/preset-env",
                {
                    targets: { browsers: ["> 1%", "last 2 versions", "not ie 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]