一、基本环境创建
1、安装nvm
在 https://github.com/coreybutler/nvm-windows/releases 下載nvm-setup.exe
Windows 下直接安装
nvm list available 查看nodejs版本
| CURRENT | LTS | OLD STABLE | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
| 21.7.1 | 20.12.0 | 0.12.18 | 0.11.16 |
| 21.7.0 | 20.11.1 | 0.12.17 | 0.11.15 |
| 21.6.2 | 20.11.0 | 0.12.16 | 0.11.14 |
| 21.6.1 | 20.10.0 | 0.12.15 | 0.11.13 |
| 21.6.0 | 20.9.0 | 0.12.14 | 0.11.12 |
| 21.5.0 | 18.20.0 | 0.12.13 | 0.11.11 |
| 21.4.0 | 18.19.1 | 0.12.12 | 0.11.10 |
2、安装nodejs
nvm install 20.12.0
安装完后use node 20.12.0 要选择使用哪一个
nvm uninstall 20.12.0 可以卸载
D:\work_hzyh>node -v
v20.12.0安装完成
3、安装pnpm
pm i -g pnpm
pnpm get registry
pnpm set registry https://registry.npmmirror.com# 允许设置全局安装包的 bin 文件的目标目录。
pnpm config set global-bin-dir "D:\pnpm-store"
# 包元数据缓存的位置。
pnpm config set cache-dir "D:\pnpm-store\pnpm-cache"
# pnpm 创建的当前仅由更新检查器使用的 pnpm-state.json 文件的目录。
pnpm config set state-dir "D:\pnpm-store\pnpm-state"
# 指定储存全局依赖的目录。
pnpm config set global-dir "D:\pnpm-store\global"
# 所有包被保存在磁盘上的位置。
#(可选,以下这条命令可以选择不执行也是OK的)
pnpm config set store-dir "D:\pnpm-store\pnpm-store"
二、创建项目
pnpm create vite@latest hzyh-admin --template vue-ts
cd hzyh-admin
pnpm install
pnpm run dev
即可看到界面界面这个样子
三、package.json解析
安装各种插件(后面带-D 放在devDependencies下,开发环境,打包后不需要的,不加-d放在dependencies,也可以加-S生产环境中使用的)分开装也可以,放在json里直接pnpm i 就ok
四、Vite多环境配置及变量识别规
配置 Vite | Vite 官方中文文档 https://cn.vitejs.dev/config/看官方文档基本都能看明白
* 关于vite的别名是`vite dev`,`vite serve`
A、主要要注意几点
1、vite以当前工作目录作为根目录启动开发服务器,其实就是我们项目目录下面,也就是和vite.config.ts一个目录,当然也可以自己配置
2、vite的别名是`vite dev`,`vite serve`,
3、默认情况下,开发服务器 (dev
命令) 运行在 development
(开发) 模式,而 build
命令则运行在 production
(生产) 模式。这意味着当执行 vite build
时,它会自动加载 .env.production
中可能存在的环境变量
3、通过--mode 来指定模式,会覆盖默认模式,比如下面代码中
"dev": "vite",执行pnpm dev时,打印 command === serve mode === development,
如果我们 "dev": "vite --mode local",,那么执行pnpm dev 答应command === serve mode === local,同时意味着它会自动加载
.env.local
中存在的环境变量
{
"scripts": {
"dev": "vite", // 启动开发服务器,别名:`vite dev`,`vite serve`
"build": "vite build", // 为生产环境构建产物
"preview": "vite preview" // 本地预览生产构建产物
}
}
4、注意 Vite 默认是不加载 .env
文件的,需要的时候使用 Vite 导出的 loadEnv
函数来加载指定的 .env
文件
B、看看代码的效果
下面我们看看vite.config.ts
// 当前执行node命令时文件夹的地址(工作目录)
const root = process.cwd()
// https://vitejs.dev/config/
export default ({ command, mode }: ConfigEnv): UserConfig => {
console.log("command === ",command);
console.log("mode === ",mode);
let env = {} as any
env = loadEnv(mode, root)
console.log("env === ",env);
return {
}
}
需要做的事情
Test 1 、我们先定义一个.env文件,后面不带mode,在里面定义两个常量,并且,package.json文件里设置成 "dev": "vite", 然后我们打印小env的值,运行一下pnpm dev
# 标题
VITE_APP_TITLE=测试系统
TEST='我是.env'
command === serve
mode === development
env === { VITE_APP_TITLE: '测试系统' }
说明什么,说明调用了.env,但是我们好像定义了两个,现在只答应了一个,这个就是vite的规定,前面必须是“VITE_”,当然也可以改,不过觉得没必要
改为这样
# 标题
VITE_APP_TITLE=测试系统
VITE_TEST='我是.env'
打印结果就正常了
command === serve
mode === development
env === { VITE_APP_TITLE: '测试系统', VITE_TEST: '我是.env' }
Test 2 、我们把package.json文件里设置成 "dev": "vite --mode local" 或者别的都可以,然后测测试
Error: "local" cannot be used as a mode name because it conflicts with the .local postfix for .env files.
这个错误后面来说
local不能用。改为别的dev "dev": "vite --mode dev",再测试
打印结果,说明调用了.env
command === serve
mode === dev
env === { VITE_APP_TITLE: '测试系统', VITE_TEST: '我是.env' }
Test 3 、 我们添加一个文件,和.env同目录名字就是.env.dev,后面就是刚才加的mode,
我们也在该文件下加上个常量,然后测试一下
# 标题
NODE_ENV = development
VITE_TEST ='我是.env.dev'
打印值,看看清楚,.env.dev中的VITE_TEST覆盖了.env中的VITE_TEST,所以以后定义是要注意
command === serve
mode === dev
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.dev',
VITE_USER_NODE_ENV: 'development'
}
看看打印值是不是.env和.env.dev的都调用了,看到现在应该基本都懂了吧
Test 4 、 为什么会出现local的错误
里面加两条数据,然后把"dev": "vite --mode dev",改为"dev": "vite --mode local-dev",我们再执行测试一下
NODE_ENV = local
VITE_TEST ='我是.env.local'
command === serve
mode === local-dev
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.local',
VITE_USER_NODE_ENV: 'lcoal'
}
NODE_ENV=lcoal is not supported in the .env file. Only NODE_ENV=development is supported to create a development build of your project. If you need to set process.env.NODE_ENV, you can set it in the Vite config instead.
上面打印除了信息,说明调用了.env和.env.local,而且还有个小错误,不能改为NODE_ENV=local我们改回NODE_ENV=development,正常,但是我们发现没有调用.env.dev,
Test 5 、我们改为"dev": "vite --mode local-dog",执行一下
打印结果不受影响,多试试local-****,发现都是这结果,原理未知
command === serve
mode === local-dog
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.local',
VITE_USER_NODE_ENV: 'development'
}
Test 6 、上面觉得结果有点出乎意料,然后把"dev": "vite --mode local-dog", 改为"dev": "vite"
打印结果,更加神奇,说明和--mode后面是local什么没关系,都调用了.env.local,这结果,让我不得不测试了Test 7
command === serve
mode === development
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.local',
VITE_USER_NODE_ENV: 'development'
}
Test 7 、把"dev": "vite"改为"dev": "vite --mode dev",
打印结果,
command === serve
mode === dev
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.dev',
VITE_USER_NODE_ENV: 'development'
}
还好这个结果是预期,要不搞不懂了,
C、总结一下:
1、local是个特殊,应该是系统内部有默认,其实就是--mode后面没有别的,就会调local
2、其他的就是你scripts --mode是啥就建一个啥文件就行了
* 关于build部分
也来测试几下就行了
Test 1、把scripts 里设置为"build": "vite build"
打印结果,啥参数都没有,一样调用了.env.local和.env
command === build
mode === production
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.local',
VITE_USER_NODE_ENV: 'development'
}
Test 2、把scripts 里设置为"build": "vite build --mode local-dog"
打印结果,所以有没有都会调用.env.local和.env
command === build
mode === local-dog
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.local',
VITE_USER_NODE_ENV: 'development'
}
Test 2、把scripts 里设置为"build": "vite build --mode dev"
结果很明显,没啥好说的,和serve时是一样的
command === build
mode === dev
env === {
VITE_APP_TITLE: '测试系统',
VITE_TEST: '我是.env.dev',
VITE_USER_NODE_ENV: 'development'
}
后面就不测了,build的和前面vite调用参数是一样的