Appearance
vite.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 vite 的编译选项,具体规范参考:vite.config.js
注意事项
- 仅
vue 3项目生效
部分配置项会被编译配置覆盖,例如:
- base:支持
- root:不支持
- mode:不支持
- publicDir: 不支持,固定为 static
- build.outDir:不支持
- build.assetsInlineLimit:仅 h5 支持
- build.cssCodeSplit:不支持,固定为 true
- build.lib:不支持
- build.manifest:不支持
- build.ssrManifest:不支持
- build.ssr:不支持
基础内容
必须引用 '@dcloudio/vite-plugin-uni' 并且添加到 plugins 中
js
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
export default defineConfig({
plugins: [qinjs()],
});import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
export default defineConfig({
plugins: [qinjs()],
});使用示例
自定义静态资源目录
js
import path from 'path';
import fs from 'fs-extra';
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
function copyFile() {
return {
enforce: 'post',
async writeBundle() {
await fs.copy(
path.resolve(__dirname, 'images'),
path.join(
__dirname,
'unpackage/dist',
process.env.NODE_ENV === 'production' ? 'build' : 'dev',
process.env.UNI_PLATFORM,
'images',
),
);
},
};
}
export default defineConfig({
plugins: [qinjs(), copyFile()],
});import path from 'path';
import fs from 'fs-extra';
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
function copyFile() {
return {
enforce: 'post',
async writeBundle() {
await fs.copy(
path.resolve(__dirname, 'images'),
path.join(
__dirname,
'unpackage/dist',
process.env.NODE_ENV === 'production' ? 'build' : 'dev',
process.env.UNI_PLATFORM,
'images',
),
);
},
};
}
export default defineConfig({
plugins: [qinjs(), copyFile()],
});注入全局依赖
js
// 示例从插件市场下载 mp-storage
import path from 'path';
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
import inject from '@rollup/plugin-inject';
const mpStoragePath = path.resolve(__dirname, './js_sdk/mp-storage/mp-storage');
export default defineConfig({
plugins: [
qinjs(),
inject({
localStorage: [mpStoragePath, 'localStorage'],
'window.localStorage': [mpStoragePath, 'localStorage'],
}),
],
define: {
'process.env.VUE_APP_TEST': JSON.stringify('test'),
},
});// 示例从插件市场下载 mp-storage
import path from 'path';
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
import inject from '@rollup/plugin-inject';
const mpStoragePath = path.resolve(__dirname, './js_sdk/mp-storage/mp-storage');
export default defineConfig({
plugins: [
qinjs(),
inject({
localStorage: [mpStoragePath, 'localStorage'],
'window.localStorage': [mpStoragePath, 'localStorage'],
}),
],
define: {
'process.env.VUE_APP_TEST': JSON.stringify('test'),
},
});配置环境变量
js
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
export default defineConfig({
plugins: [qinjs()],
define: {
'process.env.VUE_APP_TEST': JSON.stringify('test'),
},
});import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
export default defineConfig({
plugins: [qinjs()],
define: {
'process.env.VUE_APP_TEST': JSON.stringify('test'),
},
});发布时删除 console
js
import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
export default defineConfig({
plugins: [qinjs()],
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
},
},
},
});import { defineConfig } from 'vite';
import qinjs from "@fe6/qinjs-vite-plugin";
export default defineConfig({
plugins: [qinjs()],
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
},
},
},
});发布时动态修改 manifest.json
js
// 读取 manifest.json ,修改后重新写入
const fs = require('fs');
const manifestPath = './src/manifest.json';
let Manifest = fs.readFileSync(manifestPath, { encoding: 'utf-8' });
function replaceManifest(path, value) {
const arr = path.split('.');
const len = arr.length;
const lastItem = arr[len - 1];
let i = 0;
let ManifestArr = Manifest.split(/\n/);
for (let index = 0; index < ManifestArr.length; index++) {
const item = ManifestArr[index];
if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
if (i === len) {
const hasComma = /,/.test(item);
ManifestArr[index] = item.replace(
new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`),
`"${lastItem}": ${value}${hasComma ? ',' : ''}`
);
break;
}
}
Manifest = ManifestArr.join('\n');
}
// 使用
replaceManifest('app-plus.usingComponents', false);
replaceManifest('app-plus.splashscreen.alwaysShowBeforeRender', false);
replaceManifest('wx.usingComponents', false);
fs.writeFileSync(manifestPath, Manifest, {
flag: 'w',
});
export default defineConfig({
// ...
});// 读取 manifest.json ,修改后重新写入
const fs = require('fs');
const manifestPath = './src/manifest.json';
let Manifest = fs.readFileSync(manifestPath, { encoding: 'utf-8' });
function replaceManifest(path, value) {
const arr = path.split('.');
const len = arr.length;
const lastItem = arr[len - 1];
let i = 0;
let ManifestArr = Manifest.split(/\n/);
for (let index = 0; index < ManifestArr.length; index++) {
const item = ManifestArr[index];
if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
if (i === len) {
const hasComma = /,/.test(item);
ManifestArr[index] = item.replace(
new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`),
`"${lastItem}": ${value}${hasComma ? ',' : ''}`
);
break;
}
}
Manifest = ManifestArr.join('\n');
}
// 使用
replaceManifest('app-plus.usingComponents', false);
replaceManifest('app-plus.splashscreen.alwaysShowBeforeRender', false);
replaceManifest('wx.usingComponents', false);
fs.writeFileSync(manifestPath, Manifest, {
flag: 'w',
});
export default defineConfig({
// ...
});启用压缩的方法:
- cli 创建的项目可以在
package.json中添加参数--minify