vite.config.jdt.ts 3.1 KB

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