zoukankan      html  css  js  c++  java
  • umijs 开发优化和生产优化

    .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,
    });
    
  • 相关阅读:
    笔记:多线程访问ConcurrentHashMap对key加锁
    根据第三列去重
    Correct the classpath of your application so that it contains a single, compatible version of org.apache.log4j.ConsoleAppender
    python 中将源配置为阿里
    criteria两个 判断
    git flow
    sqlmap用法详解
    MongoDB 入门
    MongoDB 手册
    OWASP TOP 10简单介绍
  • 原文地址:https://www.cnblogs.com/ajanuw/p/15031752.html
Copyright © 2011-2022 走看看