import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import legacy from '@vitejs/plugin-legacy'; import Markdown from 'vite-plugin-md'; import path from 'path'; import config from './package.json'; const hljs = require('highlight.js'); // https://highlightjs.org/ import { compressText } from './src/sites/doc/components/demo-block/basedUtil'; const resolve = path.resolve; // https://vitejs.dev/config/ export default defineConfig({ base: '/3x/', server: { port: 2021, host: '0.0.0.0', proxy: { '/devServer': { target: 'https://nutui.jd.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/devServer/, '') } } }, resolve: { alias: [{ find: '@', replacement: resolve(__dirname, './src') }] }, css: { preprocessorOptions: { scss: { // example : additionalData: `@import "./src/design/styles/variables";` // dont need include file extend .scss additionalData: `@import "@/packages/styles/variables.scss";@import "@/sites/assets/styles/variables.scss";` } }, postcss: { plugins: [ require('autoprefixer')({ overrideBrowserslist: ['> 0.5%', 'last 2 versions', 'ie > 11', 'iOS >= 10', 'Android >= 5'] }) ] } }, plugins: [ vue({ include: [/\.vue$/, /\.md$/] }), Markdown({ // default options passed to markdown-it // see: https://markdown-it.github.io/markdown-it/ markdownItOptions: { highlight: function (str, lang) { if (lang && hljs.getLanguage(lang)) { try { return hljs.highlight(lang, str).value; } catch (__) {} } return ''; // 使用额外的默认转义 } }, markdownItSetup(md) { md.use(require('markdown-it-container'), 'demo', { validate: function (params) { return params.match(/^demo\s*(.*)$/); }, render: function (tokens, idx) { const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/); if (tokens[idx].nesting === 1) { // opening tag const contentHtml = compressText(tokens[idx + 1].content); return `` + md.utils.escapeHtml(m[1]) + '\n'; } else { // closing tag return '\n'; } } }); } }) // legacy({ // targets: ['defaults', 'not IE 11'] // }) ], build: { target: 'es2015', outDir: './dist/3x/', // assetsDir: config.version, cssCodeSplit: true, rollupOptions: { input: { // doc: resolve(__dirname, 'index.html'), mobile: resolve(__dirname, 'demo.html') }, output: { entryFileNames: `demo-${config.version}/[name].js`, chunkFileNames: `demo-${config.version}/[name].js`, assetFileNames: `demo-${config.version}/[name].[ext]` } } } });