首页 > 其他分享 >配置全局变量直接调用函数

配置全局变量直接调用函数

时间:2024-03-18 15:11:57浏览次数:21  
标签:src 配置 调用函数 replace path import 全局变量 true vite

配置全局变量直接调用函数

目的

想要在项目中使用defs.utills.getFunction()的方式,直接调用我们的函数,不再使用import 的方式进行导入,直接在工程化上做手脚进行自动导入解决。

过程

    1. 首先我们在我们的项目框架src/目录下定义一个全局的utill文件,这个我们可以分类型创建文件夹、完善文件夹里的函数定义,如下结构:
      img
    1. 我们可以使用node脚本来读取这个utill文件结构,生成如下结构的内容,写入我们根目录下的global.ts文件中
      import * as home from './src/utill/home';
      import * as login from './src/utill/login';
      const Defs = {
      home,
      login,
      };
      export default Defs;
      
    1. 我们需要在根目录中定义global.d.ts定义全局ts类型的文件
    1. 接下来我们就可以在项目中使用我们的定义的全局变量了

      img

- 5. 我们可以看到我们的ts已经提示这个方法的使用方式了,此时此刻我们会发现我们的项目报错,因为本质上我们是没有引入这个函数的,因此我们需要通过vite插件见我们这个形式的代码转化为原始的调用方式`import function form 'src/utills/login`的形式

- 6. vite插件
 // vite-plugin-replace-def.js

import MagicString from 'magic-string';

export default function replaceDef() {
  return {
    name: 'vite-plugin-replace-def',
    transform(code, id) {
      if (id.endsWith('.tsx')) {
        const s = new MagicString(code);
        const importStatements = new Set();

        // 匹配 Def.[module].[function] 的模式
        const pattern = /Def\.(\w+)\.(\w+)/g;
        let match;

        while ((match = pattern.exec(code)) !== null) {
          const [, module, func] = match;
          const importPath = `src/utill/${module}`;

          // 替换调用方式
          s.overwrite(match.index, match.index + match[0].length, func);

          // 添加 import 语句到集合中(避免重复)
          importStatements.add(`import { ${func} } from '${importPath}';\n`);
        }

        // 将所有 import 语句添加到文件顶部
        importStatements.forEach(importStatement => {
          s.prepend(importStatement);
        });

        return {
          code: s.toString(),
          map: s.generateMap({ hires: true }),
        };
      }

      return null;
    },
  };
}

    1. 在我们vite配置中添加这个插件

vite-config.ts

 
 import { resolve } from 'path';
import codeFinder from '@ali/vite-plugin-code-find';
import react from '@vitejs/plugin-react';
import reactRefresh from '@vitejs/plugin-react-refresh';
import { defineConfig } from 'vite';
import closePortPlugin from './config/vitePlugin/vite-plugin-close-port';
import replaceDef from './config/vitePlugin/vite-plugin-replace-def';

// https://vitejs.dev/config/
export default defineConfig({
  clearScreen: false,
  plugins: [closePortPlugin() as any, react(), reactRefresh(), codeFinder(), replaceDef()],
  resolve: {
    /* 别名配置 */
    alias: {
      src: resolve(__dirname, './src'),
      '@': resolve(__dirname, './src'),
    },
  },
  server: {
    host: '127.0.0.1',
    port: 3001,
    strictPort: true,
    open: true,
    hmr: {
      overlay: false,
    },
    /* 当我开启之后 我的learn-redux项目中可以请求 fals则不可以 出现cors */
    cors: true,
    proxy: {
      '/localApi': {
        target: 'https://www.fangpi.net/',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/localApi/, ''),
      },
      '/localCdn': {
        target: 'https://sy-sycdn.kuwo.cn/',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/localCdn/, ''),
      },
      '/api': {
        target: 'http://127.0.0.1:3000',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, ''),
      },
      '/imgApi': {
        target: 'https://image.baidu.com',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/imgApi/, ''),
      },
    },
    /* 当我设置为允许我的learn-redux项目中的id+端口之后 就可以访问 不添加就出现cors  */
    // headers: { "Access-Control-Allow-Origin": "http://127.0.0.1:8000" },
  },
  build: {
    outDir: 'ts-super-web', // 生成输出的根目录。如果该目录存在,则会在生成之前将其删除。 默认文件夹名称为dist
    target: 'esnext',
    terserOptions: {
      compress: {
        drop_console: true, // 生产环境去掉控制台 console
        drop_debugger: true, // 生产环境去掉控制台 debugger 默认就是true
        dead_code: true, // 删除无法访问的代码 默认就是true
      },
    },
    chunkSizeWarningLimit: 2000, // 调整区块大小警告限制
  },
  publicDir: './entry',
});

ok 开发环可以正常运行了,我们生产环境也需要这样处理一下!才可~

标签:src,配置,调用函数,replace,path,import,全局变量,true,vite
From: https://www.cnblogs.com/gjzsa/p/18080449

相关文章

  • 【Java】i18n国际化解决方案:通过AOP切面实现多语言的配置
    需求背景国际化多语言配置。相较于常规的方法,这次采取了切面的方式,来完成所有字段->不同语言的映射。大致逻辑:按常规的国际化,写一个获取语言的方法:getMsg(Stringcode);写一个深层遍历对象的方法traverseObject(Objectobj),通过反射,获取所有类型为字符串的字段,并实现对字......
  • ubuntu系统Jenkins + Gitlab 集成 实现CI\CD (配置前后端)
    官网地址:Linux首先配置jdk17的环境,jenkins依附于java安装gitaptinstallgit更新aptupdate安装jdk17aptinstallopenjdk-17-jdkvim/etc/profileexportJAVA_HOME=/usr/local/java/exportJRE_HOME=$JAVA_HOME/jreexportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib......
  • linux 服务器互信配置
    [root@bre01opt]#catenv.csvippasswdhostname192.168.248.129123123bre01192.168.248.130123123bre02[root@bre01opt]#catenv.sh#!/bin/bashfunctionRSA(){echo"设置主机公钥">>./install_init.logrpm-qa|grepexpectif[$?-eq0]......
  • 【附下载】3Ds Max从安装、配置到入门提高和高级用法
    #3DsMax一、安装1.1安装说明地址:链接:https://pan.baidu.com/s/1lwKMbgbE32wCL6PpMv706A?pwd=dll8提取码:dll8–来自百度网盘超级会员V2的分享安装说明:文件夹里有安装说明安装解压即可关键就是将crack文件放到自己的安装目录即可1.2安装小技巧尽量新建一个一个......
  • linux配置文件
    [.bashrc]bashresourceconfiguration配置文件[给命令设置别名]设置临时别名,只在当前终端有效//设置别名user$aliaslss='ls'//查看已经设置的别名user$alias//删除别名user$unaliaslss设置永久别名,在~/.bashrc中间中写入alias别......
  • docker配置文件解析
    {"authorization-plugins":[],//用于指定授权插件的列表,一般用于自定义认证"data-root":"",//Docker运行时使用的根路径,默认/var/lib/docker"dns":[],//设定容器DNS的地址,在容器的/etc/resolv.conf文件中可查看"dns-opts":[],//容器/etc/resolv.conf文件,其他设......
  • VSCODE安装GO语言并配置go module启动
    前言go语言近期太火了,尤其是公司需要快速搭建服务上线,非常推荐大家学习,而且这个语言写法跟前端的ts非常相似,因此继php之后,nodejs+ts转go也是上手非常快。安装成功后查看版本goversion配置gomodule1goenv-wGO111MODULE=on2goenv-wGOPROXY=https://gopro......
  • BcLinux-Redis-集群(cluster)模式安装配置
    IP:192.168.0.28081、8082IP:192.168.0.3 8081、8082IP:192.168.0.4 8081、80821、三个节点同样操作[root@server-1setup]#yuminstalltcl或者:wgethttp://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gztarxzvftcl8.6.1-src.tar.gz-C/home/local/cd/home/loc......
  • conda配置源问题
    6.配置源condaconfig--addchannelshttp://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/freecondaconfig--addchannelshttp://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forgecondaconfig--addchannelshttp://mirrors.tuna.tsinghua.edu.cn/anaconda/cl......
  • 从0到1:CTFer成长之路网上平台的使用以及docker环境配置
    1.首先安装docker(这里在kali里演示)sudosu#以root身份运行aptinstalldocker.io#安装dockersystemctlstartdocker#启动dockersystemctlenabledocker.service#将docker服务设置为开机自启docker-v#查看是否安装成功,回显版本号说明安装成功2.配置yml文件并启动ap......