Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vite.config.js')
-rw-r--r--vite.config.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 00000000000..6ff6cda0288
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,106 @@
+import path from 'path';
+import { defineConfig } from 'vite';
+import svgLoader from 'vite-svg-loader';
+import vue from '@vitejs/plugin-vue2';
+import graphql from '@rollup/plugin-graphql';
+import RubyPlugin from 'vite-plugin-ruby';
+import { viteCommonjs } from '@originjs/vite-plugin-commonjs';
+import webpackConfig from './config/webpack.config';
+import {
+ IS_EE,
+ IS_JH,
+ SOURCEGRAPH_PUBLIC_PATH,
+ GITLAB_WEB_IDE_PUBLIC_PATH,
+} from './config/webpack.constants';
+import viteSharedConfig from './config/vite.json';
+
+const aliasArr = Object.entries(webpackConfig.resolve.alias).map(([find, replacement]) => ({
+ find: find.includes('$') ? new RegExp(find) : find,
+ replacement,
+}));
+
+const assetsPath = path.resolve(__dirname, 'app/assets');
+const javascriptsPath = path.resolve(assetsPath, 'javascripts');
+
+const emptyComponent = path.resolve(javascriptsPath, 'vue_shared/components/empty_component.js');
+
+const [rubyPlugin, ...rest] = RubyPlugin();
+
+// We can't use regular 'resolve' which points to sourceCodeDir in vite.json
+// Because we need for '~' alias to resolve to app/assets/javascripts
+// We can't use javascripts folder in sourceCodeDir because we also need to resolve other assets
+// With undefined 'resolve' an '~' alias from Webpack config is used instead
+// See the issue for details: https://github.com/ElMassimo/vite_ruby/issues/237
+const fixedRubyPlugin = [
+ {
+ ...rubyPlugin,
+ config: (...args) => {
+ const originalConfig = rubyPlugin.config(...args);
+ return {
+ ...originalConfig,
+ resolve: undefined,
+ };
+ },
+ },
+ ...rest,
+];
+
+const EE_ALIAS_FALLBACK = [
+ {
+ find: /^ee_component\/(.*)\.vue/,
+ replacement: emptyComponent,
+ },
+];
+
+const JH_ALIAS_FALLBACK = [
+ {
+ find: /^jh_component\/(.*)\.vue/,
+ replacement: emptyComponent,
+ },
+];
+
+export default defineConfig({
+ resolve: {
+ alias: [
+ ...aliasArr,
+ ...(IS_EE ? [] : EE_ALIAS_FALLBACK),
+ ...(IS_JH ? [] : JH_ALIAS_FALLBACK),
+ {
+ find: '~/',
+ replacement: javascriptsPath,
+ },
+ ],
+ },
+ plugins: [
+ fixedRubyPlugin,
+ vue({
+ template: {
+ compilerOptions: {
+ whitespace: 'preserve',
+ },
+ },
+ }),
+ graphql(),
+ svgLoader({
+ defaultImport: 'raw',
+ }),
+ viteCommonjs({
+ include: [path.resolve(javascriptsPath, 'locale/ensure_single_line.cjs')],
+ }),
+ ],
+ define: {
+ IS_EE: IS_EE ? 'window.gon && window.gon.ee' : JSON.stringify(false),
+ IS_JH: IS_JH ? 'window.gon && window.gon.jh' : JSON.stringify(false),
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ 'process.env.SOURCEGRAPH_PUBLIC_PATH': JSON.stringify(SOURCEGRAPH_PUBLIC_PATH),
+ 'process.env.GITLAB_WEB_IDE_PUBLIC_PATH': JSON.stringify(GITLAB_WEB_IDE_PUBLIC_PATH),
+ },
+ server: {
+ hmr: {
+ host: viteSharedConfig?.development?.host || 'localhost',
+ // ensure we stay compatible with HTTPS enabled for GDK
+ protocol: 'ws',
+ },
+ https: false,
+ },
+});