vite.config.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { defineConfig, PluginOption } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import Markdown from 'vite-plugin-md';
  4. import MarkdownIt from 'markdown-it-container';
  5. import path from 'path';
  6. import config from './package.json';
  7. import { visualizer } from 'rollup-plugin-visualizer';
  8. import hljs from 'highlight.js';
  9. import autoprefixer from 'autoprefixer';
  10. import { compressText } from './src/sites/doc/components/demo-block/basedUtil';
  11. const resolve = path.resolve;
  12. // https://vitejs.dev/config/
  13. export default defineConfig({
  14. base: '/4x/',
  15. server: {
  16. port: 2023,
  17. host: '0.0.0.0',
  18. proxy: {
  19. '/devServer': {
  20. target: 'https://nutui.jd.com',
  21. changeOrigin: true,
  22. rewrite: (path) => path.replace(/^\/devServer/, '')
  23. },
  24. '/devTheme': {
  25. target: 'https://nutui.jd.com/theme/source',
  26. changeOrigin: true,
  27. rewrite: (path) => path.replace(/^\/devTheme/, '')
  28. }
  29. }
  30. },
  31. resolve: {
  32. alias: [{ find: '@', replacement: resolve(__dirname, './src') }]
  33. },
  34. css: {
  35. preprocessorOptions: {
  36. scss: {
  37. // example : additionalData: `@import "./src/design/styles/variables";`
  38. // dont need include file extend .scss
  39. additionalData: `@import "@/packages/styles/variables-var.scss";@import "@/sites/assets/styles/variables.scss";`
  40. }
  41. },
  42. postcss: {
  43. plugins: [
  44. autoprefixer({
  45. overrideBrowserslist: ['> 0.5%', 'last 2 versions', 'ie > 11', 'iOS >= 10', 'Android >= 5']
  46. })
  47. ]
  48. }
  49. },
  50. plugins: [
  51. vue({
  52. include: [/\.vue$/, /\.md$/]
  53. }),
  54. Markdown({
  55. // default options passed to markdown-it
  56. // see: https://markdown-it.github.io/markdown-it/
  57. markdownItOptions: {
  58. highlight: function (str, lang) {
  59. if (lang && hljs.getLanguage(lang)) {
  60. try {
  61. return hljs.highlight(lang, str).value;
  62. } catch (__) {}
  63. }
  64. return ''; // 使用额外的默认转义
  65. }
  66. },
  67. markdownItSetup(md) {
  68. md.use(MarkdownIt, 'demo', {
  69. validate: function (params) {
  70. return params.match(/^demo\s*(.*)$/);
  71. },
  72. render: function (tokens, idx) {
  73. const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/);
  74. if (tokens[idx].nesting === 1) {
  75. // opening tag
  76. const contentHtml = compressText(tokens[idx + 1].content);
  77. return `<demo-block data-type="vue" data-value="${contentHtml}">` + md.utils.escapeHtml(m[1]) + '\n';
  78. } else {
  79. // closing tag
  80. return '</demo-block>\n';
  81. }
  82. }
  83. });
  84. }
  85. })
  86. // legacy({
  87. // targets: ['defaults', 'not IE 11']
  88. // })
  89. // ,[visualizer() as PluginOption]
  90. ],
  91. build: {
  92. target: 'es2015',
  93. outDir: './dist/4x/',
  94. // assetsDir: config.version,
  95. cssCodeSplit: true,
  96. cssTarget: ['chrome61'],
  97. rollupOptions: {
  98. input: {
  99. // doc: resolve(__dirname, 'index.html'),
  100. mobile: resolve(__dirname, 'demo.html')
  101. },
  102. output: {
  103. entryFileNames: `demo-${config.version}/[name].js`,
  104. chunkFileNames: `demo-${config.version}/[name].js`,
  105. assetFileNames: `demo-${config.version}/[name].[ext]`,
  106. plugins: []
  107. }
  108. }
  109. }
  110. });