| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import { defineConfig } from 'vite';
- import dts from 'vite-plugin-dts';
- import vue from '@vitejs/plugin-vue';
- import path from 'path';
- const fs = require('fs-extra');
- import config from './package.json';
- import configPkg from './src/config.json';
- const banner = `/*!
- * ${config.name} v${config.version} ${new Date()}
- * (c) 2022 @jdf2e.
- * Released under the MIT License.
- */`;
- let input = {};
- configPkg.nav.map((item) => {
- item.packages.forEach((element) => {
- let { name } = element;
- // if (name.toLowerCase().indexOf('calendar') != -1) {
- const filePath = path.join(`./src/packages/__VUE/${name.toLowerCase()}/index.taro.vue`);
- input[name] = `./src/packages/__VUE/${name.toLowerCase()}/index${fs.existsSync(filePath) ? '.taro' : ''}.vue`;
- // }
- });
- });
- export default defineConfig({
- resolve: {
- alias: [{ find: '@', replacement: path.resolve(__dirname, './src') }]
- },
- plugins: [
- vue({
- template: {
- compilerOptions: {
- isCustomElement: (tag) => {
- return (
- tag.startsWith('scroll-view') ||
- tag.startsWith('swiper') ||
- tag.startsWith('swiper-item') ||
- tag.startsWith('picker') ||
- tag.startsWith('picker-view') ||
- tag.startsWith('picker-view-column')
- );
- },
- whitespace: 'preserve'
- }
- }
- }),
- dts({
- insertTypesEntry: true,
- copyDtsFiles: false,
- cleanVueFileName: false,
- outputDir: path.resolve(__dirname, './dist/types'),
- include: path.resolve(__dirname, './src/packages/__VUE'),
- beforeWriteFile: (filePath: string, content: string) => {
- const fileContent = `import { App, PropType, CSSProperties } from 'vue';
- declare type Install<T> = T & {
- install(app: App): void;
- };
- `;
- const start = 'declare const _sfc_main:';
- const end = ';\nexport default _sfc_main;\n';
- let name = Object.keys(input).find((item: string) => item.toLowerCase() === filePath.split('/').slice(-2)[0]);
- name = name ? name : ' ';
- const remain = `
- declare module 'vue' {
- interface GlobalComponents {
- Nut${name}: typeof _sfc_main;
- }
- }
- `;
- const inputs = content.match(RegExp(`${start}([\\s\\S]*?)${end}`));
- const changeContent = inputs && inputs.length ? `${start} Install<${inputs[1]}>${end}${remain}` : content;
- return {
- filePath,
- content: fileContent + changeContent
- };
- }
- })
- ],
- build: {
- minify: false,
- lib: {
- entry: '',
- name: 'index',
- // fileName: (format) => format,
- formats: ['es']
- },
- rollupOptions: {
- // 请确保外部化那些你的库中不需要的依赖
- external: ['vue', 'vue-router', '@tarojs/taro', '@/packages/locale', '@tarojs/components'],
- input,
- output: {
- banner,
- paths: {
- '@/packages/locale': '../locale/lang'
- },
- dir: path.resolve(__dirname, './dist/packages/_es'),
- entryFileNames: '[name].js',
- plugins: []
- }
- },
- emptyOutDir: false
- }
- });
|