vite.config.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /**
  2. * CONFIG: https://vite.dev/config/
  3. */
  4. import { resolve } from "node:path";
  5. import { defineConfig } from "vite";
  6. import { viteStaticCopy } from "vite-plugin-static-copy";
  7. import { plg_svg2png, plg_svg2svg } from "./tools/plg.js";
  8. const ROOT = "../.."; // root of the git reposetory
  9. const PATH = {
  10. dist: resolve(ROOT, "searx/static/themes/simple"),
  11. // dist: resolve(ROOT, "client/simple/dist"),
  12. src: "src",
  13. modules: "node_modules",
  14. brand: "src/brand",
  15. static: resolve(ROOT, "client/simple/static"),
  16. leaflet: resolve(ROOT, "client/simple/node_modules/leaflet/dist"),
  17. templates: resolve(ROOT, "searx/templates/simple")
  18. };
  19. const svg2svg_opts = {
  20. plugins: [{ name: "preset-default" }, "sortAttrs", "convertStyleToAttrs"]
  21. };
  22. const svg2svg_favicon_opts = {
  23. plugins: [{ name: "preset-default" }, "sortAttrs"]
  24. };
  25. export default defineConfig({
  26. root: PATH.src,
  27. mode: "production",
  28. // mode: "development",
  29. // FIXME: missing CCS sourcemaps!!
  30. // see: https://github.com/vitejs/vite/discussions/13845#discussioncomment-11992084
  31. //
  32. // what I have tried so far (see config below):
  33. //
  34. // - build.sourcemap
  35. // - esbuild.sourcemap
  36. // - css.preprocessorOptions.less.sourceMap
  37. css: {
  38. devSourcemap: true,
  39. preprocessorOptions: {
  40. less: {
  41. // FIXME: missing CCS sourcemaps!!
  42. sourceMap: {
  43. outputSourceFiles: true,
  44. sourceMapURL: (name) => {
  45. const s = name.split("/");
  46. return s[s.length - 1] + ".map";
  47. }
  48. }
  49. // env: 'development',
  50. // relativeUrls: true,
  51. // javascriptEnabled: true,
  52. }
  53. }
  54. }, // end: css
  55. esbuild: {
  56. // FIXME: missing CCS sourcemaps!!
  57. sourcemap: true
  58. },
  59. build: {
  60. target: "es2016",
  61. manifest: "manifest.json",
  62. emptyOutDir: true,
  63. assetsDir: "",
  64. outDir: PATH.dist,
  65. // FIXME: missing CCS sourcemaps!!
  66. sourcemap: true,
  67. // https://vite.dev/config/build-options.html#build-cssminify
  68. cssMinify: true,
  69. // cssMinify: "esbuild",
  70. minify: "esbuild",
  71. rollupOptions: {
  72. input: {
  73. // build CSS files
  74. "css/searxng.min.css": PATH.src + "/less/style-ltr.less",
  75. "css/searxng-rtl.min.css": PATH.src + "/less/style-rtl.less",
  76. "css/rss.min.css": PATH.src + "/less/rss.less",
  77. // build JS files
  78. "js/searxng.head.min": PATH.src + "/js/searxng.head.js",
  79. "js/searxng.min": PATH.src + "/js/searxng.js"
  80. },
  81. // file naming conventions / pathnames are relative to outDir (PATH.dist)
  82. output: {
  83. entryFileNames: "[name].js",
  84. chunkFileNames: "[name].js",
  85. assetFileNames: "[name].[ext]"
  86. // Vite does not support "rollupOptions.output.sourcemap".
  87. // Please use "build.sourcemap" instead.
  88. // sourcemap: true,
  89. }
  90. }
  91. }, // end: build
  92. plugins: [
  93. // Leaflet
  94. viteStaticCopy({
  95. targets: [
  96. { src: PATH.leaflet + "/leaflet.{js,js.map}", dest: PATH.dist + "/js" },
  97. { src: PATH.leaflet + "/images/*.png", dest: PATH.dist + "/css/images/" },
  98. { src: PATH.leaflet + "/*.{css,css.map}", dest: PATH.dist + "/css" },
  99. { src: PATH.static + "/**/*", dest: PATH.dist }
  100. ]
  101. }),
  102. // -- svg images
  103. plg_svg2svg(
  104. [
  105. { src: PATH.src + "/svg/empty_favicon.svg", dest: PATH.dist + "/img/empty_favicon.svg" },
  106. { src: PATH.src + "/svg/select-dark.svg", dest: PATH.dist + "/img/select-dark.svg" },
  107. { src: PATH.src + "/svg/select-light.svg", dest: PATH.dist + "/img/select-light.svg" }
  108. ],
  109. svg2svg_opts
  110. ),
  111. // SearXNG brand (static)
  112. plg_svg2png([
  113. { src: PATH.brand + "/searxng-wordmark.svg", dest: PATH.dist + "/img/favicon.png" },
  114. { src: PATH.brand + "/searxng.svg", dest: PATH.dist + "/img/searxng.png" }
  115. ]),
  116. // -- svg
  117. plg_svg2svg(
  118. [
  119. { src: PATH.brand + "/searxng.svg", dest: PATH.dist + "/img/searxng.svg" },
  120. { src: PATH.brand + "/img_load_error.svg", dest: PATH.dist + "/img/img_load_error.svg" }
  121. ],
  122. svg2svg_opts
  123. ),
  124. // -- favicon
  125. plg_svg2svg(
  126. [{ src: PATH.brand + "/searxng-wordmark.svg", dest: PATH.dist + "/img/favicon.svg" }],
  127. svg2svg_favicon_opts
  128. ),
  129. // -- simple templates
  130. plg_svg2svg(
  131. [{ src: PATH.brand + "/searxng-wordmark.svg", dest: PATH.templates + "/searxng-wordmark.min.svg" }],
  132. svg2svg_opts
  133. )
  134. ] // end: plugins
  135. });