mirror of https://github.com/mue/mue.git
127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
import { defineConfig, loadEnv } from 'vite';
|
|
import react from '@vitejs/plugin-react-swc';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import ADMZip from 'adm-zip';
|
|
import * as pkg from './package.json';
|
|
import progress from 'vite-plugin-progress';
|
|
|
|
const isProd = process.env.NODE_ENV === 'production';
|
|
|
|
const prepareBuilds = () => ({
|
|
name: 'prepareBuilds',
|
|
buildEnd() {
|
|
if (isProd) {
|
|
// make directories if not exist
|
|
fs.mkdirSync(path.resolve(__dirname, './build'), { recursive: true });
|
|
fs.mkdirSync(path.resolve(__dirname, './dist'), { recursive: true });
|
|
|
|
// chrome
|
|
fs.mkdirSync(path.resolve(__dirname, './build/chrome'), { recursive: true });
|
|
fs.copyFileSync(
|
|
path.resolve(__dirname, './manifest/chrome.json'),
|
|
path.resolve(__dirname, './build/chrome/manifest.json'),
|
|
);
|
|
fs.copyFileSync(
|
|
path.resolve(__dirname, './manifest/background.js'),
|
|
path.resolve(__dirname, './build/chrome/background.js'),
|
|
);
|
|
fs.cpSync(
|
|
path.resolve(__dirname, './manifest/_locales'),
|
|
path.resolve(__dirname, './build/chrome/_locales'),
|
|
{
|
|
recursive: true,
|
|
},
|
|
);
|
|
fs.cpSync(path.resolve(__dirname, './dist'), path.resolve(__dirname, './build/chrome/'), {
|
|
recursive: true,
|
|
});
|
|
fs.cpSync(
|
|
path.resolve(__dirname, './src/assets/icons'),
|
|
path.resolve(__dirname, './build/chrome/icons'),
|
|
{
|
|
recursive: true,
|
|
},
|
|
);
|
|
|
|
// firefox
|
|
fs.mkdirSync(path.resolve(__dirname, './build/firefox'), { recursive: true });
|
|
fs.copyFileSync(
|
|
path.resolve(__dirname, './manifest/firefox.json'),
|
|
path.resolve(__dirname, './build/firefox/manifest.json'),
|
|
);
|
|
fs.copyFileSync(
|
|
path.resolve(__dirname, './manifest/background.js'),
|
|
path.resolve(__dirname, './build/firefox/background.js'),
|
|
);
|
|
fs.cpSync(path.resolve(__dirname, './dist'), path.resolve(__dirname, './build/firefox/'), {
|
|
recursive: true,
|
|
});
|
|
fs.cpSync(
|
|
path.resolve(__dirname, './src/assets/icons'),
|
|
path.resolve(__dirname, './build/firefox/icons'),
|
|
{
|
|
recursive: true,
|
|
},
|
|
);
|
|
|
|
// create zip
|
|
const zip = new ADMZip();
|
|
zip.addLocalFolder(path.resolve(__dirname, './build/chrome'));
|
|
zip.writeZip(path.resolve(__dirname, `./build/chrome-${pkg.version}.zip`));
|
|
|
|
const zip2 = new ADMZip();
|
|
zip2.addLocalFolder(path.resolve(__dirname, './build/firefox'));
|
|
zip2.writeZip(path.resolve(__dirname, `./build/firefox-${pkg.version}.zip`));
|
|
}
|
|
},
|
|
});
|
|
|
|
export default defineConfig(({ command, mode }) => {
|
|
const env = loadEnv(mode, process.cwd(), '');
|
|
return {
|
|
define: {
|
|
__APP_ENV__: JSON.stringify(env.APP_ENV),
|
|
},
|
|
plugins: [react(), prepareBuilds(), progress()],
|
|
server: {
|
|
open: true,
|
|
hmr: {
|
|
protocol: 'ws',
|
|
host: 'localhost',
|
|
},
|
|
},
|
|
build: {
|
|
minify: isProd ? 'esbuild' : false,
|
|
sourcemap: !isProd,
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks(id) {
|
|
if (id.includes('node_modules')) {
|
|
if (id.includes('@mui')) {
|
|
return 'vendor_mui';
|
|
}
|
|
|
|
return 'vendor';
|
|
}
|
|
},
|
|
},
|
|
},
|
|
},
|
|
resolve: {
|
|
extensions: ['.js', '.jsx'],
|
|
alias: {
|
|
'@': path.resolve(__dirname, './src'),
|
|
i18n: path.resolve(__dirname, './src/i18n'),
|
|
components: path.resolve(__dirname, './src/components'),
|
|
config: path.resolve(__dirname, './src/config'),
|
|
features: path.resolve(__dirname, './src/features'),
|
|
lib: path.resolve(__dirname, './src/lib'),
|
|
scss: path.resolve(__dirname, './src/scss'),
|
|
translations: path.resolve(__dirname, './src/i18n/locales'),
|
|
utils: path.resolve(__dirname, './src/utils'),
|
|
},
|
|
},
|
|
};
|
|
});
|