vite.config.ts 3.0 KB

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