vite.config.jdt.ts 3.4 KB

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