umi 3.X 优化build文件目录

文章详细描述了如何优化UMIbuild的配置,包括修改CSS、JS和图片输出目录,以及调整静态文件资源的引入路径,以确保编译后的应用能正确加载资源并提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优化前 umi build

在这里插入图片描述

优化后 效果立马拉满对不

在这里插入图片描述

解决方案如下

 // 修改css输出目录
    config.plugin('extract-css').tap(() => [
      {
        filename: `${staticDir}/css/[name].[contenthash:8].css`,
        chunkFilename: `${staticDir}/css/[name].[contenthash:8].chunk.css`,
        ignoreOrder: true
      }
    ]);
   // 修改js输出目录
    config.output.filename(`${staticDir}/js/[name].[hash:8].js`).chunkFilename(`${staticDir}/js/[name].[contenthash:8].chunk.js`);
   // 修改图片输出目录
    config.module
      .rule("images")
      .test(/\.(png|jpe?g|gif|webp|ico)(\?.*)?$/)
      .use("url-loader")
      .loader(require.resolve("url-loader"))
      .tap((options: { fallback: any; }) => {
        const newOptions = {
          ...options,
          name: staticDir + "/images/[name].[hash:8].[ext]",
          fallback: {
            ...options.fallback,
            options: {
              name: staticDir + "/images/[name].[hash:8].[ext]",
              esModule: false,
            },
          },
        };
        return newOptions;
      });

    config.module
      .rule("svg")
      .test(/\.(svg)(\?.*)?$/)
      .use("file-loader")
      .loader(require.resolve("file-loader"))
      .tap((options: any) => ({
        ...options,
        name: staticDir + "/images/[name].[hash:8].[ext]",
        esModule: false,
      }));

编译完成, 如果在项目中有引入一些静态文件资源, 记得修改引入的文件路径, 否则会找不到对于源文件而报错

 // 修改css文件资源文件访问路径
    config.module
      .rule('css')
      .oneOf('css')
      .use('extract-css-loader')
      .tap((options: any) => ({
        publicPath: '../../',
        hmr: false,
      }));
    config.module
      .rule('less')
      .oneOf('css')
      .use('extract-css-loader')
      .tap((options: any) => ({
        publicPath: '../../',
        hmr: false,
      }));
    config.module
      .rule('less')
      .oneOf('css-modules')
      .use('extract-css-loader')
      .tap((options: any) => ({
        publicPath: '../../',
        hmr: false,
      }));
以上方案,根据以下package.json配置{ "private": true, "scripts": { "analyze": "cross-env ANALYZE=1 umi build", "start": "cross-env UMI_ENV=local umi dev", "build:dev": "cross-env UMI_ENV=dev umi build", "build:test": "cross-env UMI_ENV=test umi build", "build:uat": "cross-env UMI_ENV=uat umi build", "build:prod": "cross-env UMI_ENV=prod umi build", "check:model": "umi dva list model", "postinstall": "umi generate tmp", "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'", "test": "umi-test", "test:coverage": "umi-test --coverage" }, "gitHooks": { "pre-commit": "lint-staged" }, "engines": { "node": ">= 16.14.0" }, "lint-staged": { "*.{js,jsx,less,md,json}": [ "prettier --write" ], "*.ts?(x)": [ "prettier --parser=typescript --write" ] }, "dependencies": { "@ant-design/pro-layout": "^6.5.0", "antd": "4.24.0", "antd-img-crop": "^3.16.0", "axios": "^1.6.8", "braft-editor": "^2.3.9", "braft-extensions": "^0.1.1", "classnames": "^2.2.6", "clipboard": "^2.0.8", "crypto-js": "^4.1.1", "dva-model-extend": "^0.1.2", "easy-email-core": "^4.16.1", "easy-email-editor": "^4.16.1", "jsencrypt": "3.2.1", "less-vars-to-js": "^1.3.0", "locales": "^0.0.2", "lodash": "^4.17.21", "lrz": "^4.9.41", "mjml-browser": "^4.15.3", "moment": "^2.25.3", "nprogress": "^0.2.0", "react": "17.0.0", "react-color": "^2.19.3", "react-dnd": "^14.0.4", "react-dom": "17.0.0", "react-final-form": "^6.5.9", "react-webcam": "^7.2.0", "store": "2.0.12", "umi": "3.5.20", "yarn": "^1.22.22" }, "devDependencies": { "@lingui/babel-preset-react": "^2.9.0", "@types/crypto-js": "^4.0.2", "@types/lodash": "^4.14.176", "@types/nprogress": "^0.2.0", "@types/qs": "^6.9.7", "@types/react": "17.0.0", "@types/react-dom": "17.0.0", "@typescript-eslint/eslint-plugin": "^5.2.0", "@typescript-eslint/parser": "^5.2.0", "@umijs/preset-react": "^2.1.7", "cross-env": "^7.0.3", "eslint": "^8.1.0", "eslint-plugin-react": "^7.26.1", "lint-staged": "^10.0.7", "prettier": "^2.2.0", "typescript": "^4.1.2", "yorkie": "^2.0.0", "zip-webpack-plugin": "^4.0.1" }, "resolutions": { "@types/react": "17.0.0", "@types/react-dom": "17.0.0", "immer": "9.0.7" }, "preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions" },重新制定方案
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值