umijs 开发优化和生产优化

摘要:
μ弧。tsimport{defineConfig}from'umi';importdevfrom”/config/dev';importprodfrom'/config/prod';console.log(process.env.NODE_env);constenvConfig='development'==process.env。节点环境?dev:产品;出口,出口

umijs 开发优化和生产优化第1张

.umirc.ts

import { defineConfig } from 'umi';

import dev from './config/dev';
import prod from './config/prod';

console.log(process.env.NODE_ENV);
const envConfig = 'development' === process.env.NODE_ENV ? dev : prod;

export default defineConfig({
  webpack5: {}, // 使用webpack 5
  nodeModulesTransform: {
    type: 'none',
  },
  routes: [{ path: '/', component: '@/pages/index' }],
  fastRefresh: {},
  ...envConfig,
});

config/dev

开发时使用 chunk,cache和esbuild-loader 减少打包时间

esbuild-loader 不支持 typescript 的 emitDecoratorMetadata, 如果你需要 emitDecoratorMetadata 可以将 esbuild-loader 换成 swc

import { defineConfig } from 'umi';

export default defineConfig({
  hash: false,
  devServer: {
    // writeToDisk: true,
  },
  chunks: ['vendors', 'umi'],
  chainWebpack: function (config, { webpack }) {
    config.merge({
      // https://webpack.js.org/configuration/cache/
      cache: {
        type: 'filesystem',
      },
      optimization: {
        moduleIds: 'deterministic',
        splitChunks: {
          cacheGroups: {
            vendor: {
              test: /[\/]node_modules[\/]/,
              name: 'vendors',
              chunks: 'all',
            },
          },
        },
      },
      module: {
        rules: [
          {
            test: /.tsx?$/,
            loader: 'esbuild-loader',
            options: {
              loader: 'tsx',
              target: 'esnext',
            },
          },
        ],
      },
    });
  },
});

config/prod

打包生产时 能用cdn的就用cdn

import { defineConfig } from 'umi';
import * as pkg from '../package.json';

const externalsConfig: any = {
  lodash: {
    name: '_',
    cdn: (version: string) =>
      `https://cdnjs.cloudflare.com/ajax/libs/react/${version}/umd/react.production.min.js`,
  },
  react: {
    name: 'React',
    cdn: (version: string) =>
      `https://cdnjs.cloudflare.com/ajax/libs/react-dom/${version}/umd/react-dom.production.min.js`,
  },
  'react-dom': {
    name: 'ReactDOM',
    cdn: (version: string) =>
      `https://cdnjs.cloudflare.com/ajax/libs/lodash.js/${version}/lodash.min.js`,
  },
};

const externals: any = {};
const scripts: string[] = [];
for (const pname in externalsConfig) {
  externals[pname] = externalsConfig[pname].name;
  if (pname in pkg.dependencies) {
    const version = (pkg.dependencies as any)[pname].replace(/^D/, '');
    scripts.push(externalsConfig[pname].cdn(version));
  }
}

export default defineConfig({
  hash: true,
  chainWebpack: function (config, { webpack }) {
    config.merge({
      optimization: {
        minimize: true,
        usedExports: true,
      },
    });
  },
  externals,
  scripts,
});

免责声明:文章转载自《umijs 开发优化和生产优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pgsql 相关函数JQurey下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

uniapp 中出现 wx.config is not a function

最近使用uniapp做了一个微信公众号网页 调用微信jssdk 报错为wx.config is not a function 我也引用了http://res2.wx.qq.com/open/js/jweixin-1.6.0.js 原因是uniapp里面内置了一个名为wx的全局变量,结果是肯定的,wx变量都被重写了,wx.config肯定也是undefi...

SpringMVC加载配置Properties文件的几种方式

最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定、URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 1.通过context:property-placeholde实现配置文件加载   1.1、在...

怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障

怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repair_a_missing_or_cor1.htm 此类错误通常说明计算机由于注冊表的原因不能启动,下列操作应该可以修正以上错误。然而,须要特别注意的是,你须...

JedisPool无法获得资源问题

线上碰到一个问题:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:22) 线上会相隔不定时的天数后出现一次Jedis...

往android的内核添加驱动及 ueventd.rc 修改【转】

本文转载自:http://blog.csdn.net/lkqboy2599/article/details/8350100 向android的内核添加驱动,其实就是向linux内核添加驱动。主要在两个文件里添加点信息,一个是Kconfig文件,一个是Makefile文件。比如你添加的驱动你代码放到drivers目录下面的XXX目录,那么修在该目录下的Kco...

ESP32开发(2)esp32-cam采集图像

ESP32-CAM摄像头开发板 USB转串口下载器 杜邦连接线若干        注意:GPIO0连接GND(下拉)的作用是让ESP32-CAM进入下载启动模式,这个模式里,才能利用Arduino IDE给ESP32编程,否则IDE会报错,代码烧录完成后,我们需要断开GPIO0和GND的连接,让ESP32进入正常的内存启动模式。 配置ESP32环...