草庐IT

react中一些vite常见配置

不知名秋刀鱼 2023-11-11 原文

使用vite,首先要在项目根目录创建vite.config.js的文件,如果使用ts的话,也可以是.ts文件。 这里其实重点想要说的是,vite属于新兴的工具,所以对于他的配置项,我们必然是很陌生的,但是官方很贴心的,给我们提供了方案——一个可以给出配置提示的方法:

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import path from 'path';

export default defineConfig({
  plugins: [reactRefresh()],
})

如上,只要引用defineConfig,包裹vite的config,你在键入options的时候,就可以看到提示啦。 还有需要注意的一点,vite内置less,和sass,但是如果使用默认配置,那么在给less,和sass文件起名字的时候,文件名后缀要使用.module.less,这样vite才能正确识别

项目中实用、常用配置

文件别名配置resolve.alias

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import path from 'path';

export default defineConfig({
  plugins: [reactRefresh()],
  resolve: {
    alias: [
      { find: "src", replacement: path.resolve(__dirname,'src') },
    ]
  },
})

less设置全局变量css.preprocessorOptions

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import path from 'path';

export default defineConfig({
  plugins: [reactRefresh()],
  css: {
    preprocessorOptions: {
      less: {
        additionalData: `@import "${path.resolve(__dirname, 'src/theme.module.less')}";`,
        javascriptEnabled: true,
      }
    },
  },
})

打包

打包这里问题比较多,首先要确定自己的项目,是什么场景。比如:是一个完成的应用,需要将html打包进项目的,可以使用默认配置。如果自己的项目是SDK,或者是一个react组件。那么就需要使用另外一种库模式来打包。还有node环境的npm包,比如脚手架之类需要执行某些node命令行的配置,都会有所不同

常规配置-rollupOptions

一般的打包配置,可以使用rollupOptions,这部分具体有什么配置项,有哪些参数,我这里偷个懒,大家可以去rollup官方文档去查(虽然我知道这样比较烦人,但是这部分比较容易查,所以就不写啦,我重点写一点,不太容易查到的配置) 这里只分享一个我遇到的,更改css构建产物文件名的配置

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import path from 'path';

export default defineConfig({
  plugins: [reactRefresh()],
  build: {
    rollupOptions: {
      output:{
		  entryFileNames: `[name].${timestamp}.js`,
	      chunkFileNames: `[name].${timestamp}.js`,
	      // css文件名
	      assetFileNames: `[name].${timestamp}.[ext]`
	      // 比如你想构建出来的css为dist/index.css,那么你可以这样
	      //  assetFileNames: `index.[ext]`
	  }
	}
  },
})

库模式

这个模式适用于,打包一个不含html文件的场景

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import path from 'path';

export default defineConfig({
  plugins: [reactRefresh()],
  build: {
    lib: {
      // 入口文件
      entry: path.resolve(__dirname, 'src/index.tsx'),
      // umd、iife的格式vite要求必须要有name作为导出的全局变量
      name: "SpecialEffect",
      // 导出格式,默认为["iife","umd"]
      formats: ['iife'],
      // js打包名称,当然这部分官方文档更加详细
      fileName: () => "index.js"
    },
	
	// umd格式下,支持将不需要打包的第三方库,排除在外,并指定全部环境
	// 提供的全局变量代替,比如以下的例子,不将react打包,由全局React
	// 变量提供react库
	rollupOptions: {
      external: ['react'],
      output: {
        globals: {
          react: 'React'
        }
      }
    }
  },
})

本地开发服务器的配置

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import path from 'path';

export default defineConfig({
  plugins: [reactRefresh()],
  server: {
  	// 端口
    port: 3000,
    // 是否开启https服务
    https: true,
    // 代理
    proxy: {
      '/project/delete': {
        target: 'https://www.bdsc.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/project\/delete/, '')
      },
      '/project/update': {
        target: 'https://www.bdsc.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/project\/update/, '')
      },
    }
  },
})

proxy

{
	proxy:{
		'api':{
			target: 'https://www.bdsc.com',
        	changeOrigin: true,
        	rewrite: (path) => path.replace(/^\api/, '')
		}
	}
}

以上配置可以解决proxy百分之九十的问题,但是这个含义却很少有人讲的清楚。 首先 "api"这个是一个标识符,虽然很多接口会提供给你类似这样的'www.bdsc.com/api/materia…

我还是拿www.bdsc.com/api/materia…

首先我们需要向本地开发服务发起请求,然后本地开发服务器请求地址www.bdsc.com/api/materia…

发起请求的方式是,我们通过proxy定义一个标识符,例如aaa,然后在本地开发服务器的地址拼接上标识符aaa。也就是localhost:3000/aaa,这样就可以对本地开发服务器发起请求了。当你发起这个请求,本地开发服务器要做什么呢?他会根据配置中的target字段的地址,也就是www.bdsc.com,拼接上aaa标识符,然后再拼接上/api/materia… rewrite字段中,将aaa这个标识符,替换为空的字符串。那么这样得到的最终地址就是www.bdsc.com/api/materia…

当然这个标识符你不想自定义,想要使用接口中的那个api字段行不行呢,当然也可以,最后不需要rewrite就好了

上面说了一大堆。字有点多,可能也少有人耐心看。下面我就从头到位的说一下具体做法,代码:

import axios from 'axios';
import env from './env';

// env 环境变量,这里必须要判断当前的环境。本地开发,还是在生产、日常、预发等
// 是否是本地环境
const isLocal = env === "LOCAL"
// 本地开发baseURL使用标识符,浏览器会自动添加域名,也就是本地开发服务器的域名
const baseURL = isLocal ? "aaa" : "https://www.bdsc.com"

axios({
	baseURL,
	url:"api/material",
	method:"GET",
	params:{}
})
.then(res => {
	// 发起请求
})

如果是本地环境,那么上面实际请求的地址就是类似http://localhost:3000/aaa/api/material这种地址

下面proxy的配置

{
	proxy:{
		'aaa':{
			target: 'https://www.bdsc.com',
        	changeOrigin: true,
        	rewrite: (path) => path.replace(/^\aaa/, '')
		}
	}
}

当本地服务器收到http://localhost:3000/aaa/api/material的请求,便会将localhost:3000替换为target:https://www.bdsc.com的到https://www.bdsc.com/aaa/api/material, 然后再根据rewrite的配置,将aaa替换为空字符串。得到www.bdsc.com/api/materia…

以上是关于vite的配置的一点总结

有关react中一些vite常见配置的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  4. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  5. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  6. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  7. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  8. ruby - 找一些句子 - 2

    我想找到在某些文本中找到一些(让它是两个)句子的好方法。什么会更好-使用正则表达式或拆分方法?你的想法?应JeremyStein的要求-有一些例子示例:输入:ThefirstthingtodoistocreatetheCommentmodel.We’llcreatethisinthenormalway,butwithonesmalldifference.IfwewerejustcreatingcommentsforanArticlewe’dhaveanintegerfieldcalledarticle_idinthemodeltostoretheforeignkey,butinthis

  9. Ruby 默认将 IRB 配置为 Pretty_Inspect - 2

    我是ruby​​的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽

  10. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

随机推荐