ソースを参照

chore: 组件按需引入批量修改

richard1015 4 年 前
コミット
67735bce75
43 ファイル変更96 行追加87 行削除
  1. 1 1
      demo.html
  2. 1 1
      index.html
  3. 1 3
      src/packages/address/index.vue
  4. 1 3
      src/packages/avatar/index.vue
  5. 1 7
      src/packages/backtop/index.vue
  6. 1 3
      src/packages/button/index.vue
  7. 1 6
      src/packages/calendar/index.vue
  8. 0 1
      src/packages/calendaritem/index.vue
  9. 1 3
      src/packages/cell/index.vue
  10. 0 1
      src/packages/checkbox/index.vue
  11. 1 3
      src/packages/collapse/index.vue
  12. 0 1
      src/packages/dialog/index.vue
  13. 1 4
      src/packages/infiniteloading/index.vue
  14. 1 3
      src/packages/input/index.vue
  15. 1 3
      src/packages/inputnumber/index.vue
  16. 6 1
      src/packages/layout/demo.vue
  17. 1 4
      src/packages/menu/index.vue
  18. 1 3
      src/packages/menuitem/index.vue
  19. 1 3
      src/packages/navbar/index.vue
  20. 1 1
      src/packages/picker/Column.vue
  21. 2 1
      src/packages/picker/index.vue
  22. 1 3
      src/packages/popup/index.vue
  23. 1 1
      src/packages/price/index.vue
  24. 1 1
      src/packages/pullrefresh/index.vue
  25. 1 1
      src/packages/radio/index.vue
  26. 1 1
      src/packages/range/index.vue
  27. 1 3
      src/packages/rate/index.vue
  28. 1 3
      src/packages/shortpassword/index.vue
  29. 2 0
      src/packages/swiper/index.vue
  30. 0 0
      src/packages/swiperitem/demo.vue
  31. 0 0
      src/packages/swiperitem/doc.md
  32. 0 0
      src/packages/swiperitem/index.scss
  33. 0 0
      src/packages/swiperitem/index.vue
  34. 1 3
      src/packages/tabbar/index.vue
  35. 1 5
      src/packages/tabbaritem/index.vue
  36. 1 1
      src/packages/tabpanel/index.vue
  37. 0 1
      src/packages/temp/index.vue
  38. 1 3
      src/packages/toast/index.vue
  39. 1 3
      src/packages/uploader/index.vue
  40. 0 1
      src/sites/mobile/App.vue
  41. 0 1
      src/sites/mobile/components/Index.vue
  42. 4 0
      src/utils/create/component.ts
  43. 54 0
      vite.config.build.single.ts

+ 1 - 1
demo.html

@@ -29,7 +29,7 @@
       >
     </noscript>
     <div id="app"></div>
-    <script type="module" src="./src//sites/mobile/main.ts"></script>
+    <script type="module" src="./src/sites/mobile/main.ts"></script>
     <script>
       //分享配置
       var shareOption = {

+ 1 - 1
index.html

@@ -45,7 +45,7 @@
       >
     </noscript>
     <div id="doc"></div>
-    <script type="module" src="./src//sites/doc/main.ts"></script>
+    <script type="module" src="./src/sites/doc/main.ts"></script>
     <script>
       //分享配置
       var shareOption = {

+ 1 - 3
src/packages/address/index.vue

@@ -122,9 +122,7 @@ const { componentName, create } = createComponent('address');
 import { TweenMax } from 'gsap';
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     show: {
       type: Boolean,

+ 1 - 3
src/packages/avatar/index.vue

@@ -12,9 +12,7 @@ import { createComponent } from '@/utils/create';
 const { componentName, create } = createComponent('avatar');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     size: {
       type: String,

+ 1 - 7
src/packages/backtop/index.vue

@@ -20,9 +20,7 @@ import { createComponent } from '@/utils/create';
 const { create } = createComponent('backtop');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     //距离页面底部
     bottom: {
@@ -50,11 +48,7 @@ export default create({
       default: 1111
     }
   },
-
   emits: ['click'],
-
-  components: {},
-
   setup(props, { emit }) {
     const styleBottom = computed(() => `${props.bottom}px`);
     const styleRight = computed(() => `${props.right}px`);

+ 1 - 3
src/packages/button/index.vue

@@ -24,9 +24,7 @@ export type ButtonSize = 'large' | 'normal' | 'small';
 export type ButtonShape = 'square' | 'round';
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     color: String,
     shape: {

+ 1 - 6
src/packages/calendar/index.vue

@@ -47,10 +47,7 @@ import CalendarItem from '@/packages/calendaritem/index.vue';
 import Utils from '@/utils/date';
 type InputDate = string | string[];
 export default create({
-  components: {
-    [CalendarItem.name]: CalendarItem,
-    [Popup.name]: Popup
-  },
+  children: [CalendarItem, Popup],
   props: {
     type: {
       type: String,
@@ -83,9 +80,7 @@ export default create({
       default: Utils.getDay(365)
     }
   },
-  components: {},
   emits: ['choose', 'close'],
-
   setup(props, { emit }) {
     // element refs
     const calendarRef = ref<null | HTMLElement>(null);

+ 0 - 1
src/packages/calendaritem/index.vue

@@ -140,7 +140,6 @@ export default create({
       default: Utils.getDay(365)
     }
   },
-  components: {},
   emits: ['choose', 'update', 'close'],
 
   setup(props, { emit }) {

+ 1 - 3
src/packages/cell/index.vue

@@ -38,9 +38,7 @@ import { useRouter } from 'vue-router';
 const { componentName, create } = createComponent('cell');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     title: { type: String, default: '' },
     subTitle: { type: String, default: '' },

+ 0 - 1
src/packages/checkbox/index.vue

@@ -72,7 +72,6 @@ export default create({
       default: true
     }
   },
-  components: {},
   setup(props, { emit }) {
     const parentGroup = inject('checkboxgroup', {
       parentNode: false,

+ 1 - 3
src/packages/collapse/index.vue

@@ -9,9 +9,7 @@ import { createComponent } from '@/utils/create';
 const { create } = createComponent('collapse');
 import collapseitem from '@/packages/collapseitem/index.vue';
 export default create({
-  components: {
-    [collapseitem.name]: collapseitem
-  },
+  children: [collapseitem],
   props: {
     active: {
       type: [String, Number, Array]

+ 0 - 1
src/packages/dialog/index.vue

@@ -219,7 +219,6 @@ export default create({
       default: false
     }
   },
-  components: {},
   // emits: ['click'],
 
   setup(props, { emit, slots }) {

+ 1 - 4
src/packages/infiniteloading/index.vue

@@ -55,9 +55,7 @@ import { createComponent } from '@/utils/create';
 const { componentName, create } = createComponent('infiniteloading');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     hasMore: {
       type: Boolean,
@@ -88,7 +86,6 @@ export default create({
       default: false
     }
   },
-  components: {},
   emits: ['scrollChange', 'loadMore', 'refresh'],
 
   setup(props, { emit, slots }) {

+ 1 - 3
src/packages/input/index.vue

@@ -56,6 +56,7 @@ const { create } = createComponent('input');
 import { formatNumber } from './util';
 import Icon from '@/packages/icon/index.vue';
 export default create({
+  children: [Icon],
   props: {
     type: {
       type: String,
@@ -98,9 +99,6 @@ export default create({
       default: false
     }
   },
-  components: {
-    [Icon.name]: Icon
-  },
   emits: ['change', 'update:value', 'blur', 'focus', 'clear'],
 
   setup(props, { emit }) {

+ 1 - 3
src/packages/inputnumber/index.vue

@@ -40,9 +40,7 @@ interface Events {
   params: (string | number | Event)[];
 }
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     size: {
       type: [String],

+ 6 - 1
src/packages/layout/demo.vue

@@ -119,8 +119,13 @@
 <script lang="ts">
 import { createComponent } from '@/utils/create';
 const { createDemo } = createComponent('layout');
+import Row from '@/packages/row/index.vue';
+import Col from '@/packages/col/index.vue';
 export default createDemo({
-  props: {}
+  components: {
+    [Row.name]: Row,
+    [Col.name]: Col
+  }
 });
 </script>
 

+ 1 - 4
src/packages/menu/index.vue

@@ -9,6 +9,7 @@ import { createComponent } from '@/utils/create';
 const { componentName, create } = createComponent('menu');
 import menuitem from '@/packages/menuitem/index.vue';
 export default create({
+  children: [menuitem],
   props: {
     type: {
       //单选 simple  多选  multiple,暂留
@@ -20,10 +21,6 @@ export default create({
       default: true
     }
   },
-  components: {
-    [menuitem.name]: menuitem
-  },
-
   setup(props, { emit }) {
     const state = reactive({
       showMask: false

+ 1 - 3
src/packages/menuitem/index.vue

@@ -59,9 +59,7 @@ import { createComponent } from '@/utils/create';
 const { create } = createComponent('menu-item');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     title: {
       type: String,

+ 1 - 3
src/packages/navbar/index.vue

@@ -65,9 +65,7 @@ import { useRouter } from 'vue-router';
 const { componentName, create } = createComponent('navbar');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     leftShow: { type: Boolean, default: true }, //左侧  是否显示返回
     title: { type: String, default: '' }, //中间  文字标题

+ 1 - 1
src/packages/picker/Column.vue

@@ -63,7 +63,7 @@ export default create({
     dataType: String,
     ...commonProps
   },
-  components: {},
+
   emits: ['click', 'change'],
   setup(props, { emit }) {
     let moving;

+ 2 - 1
src/packages/picker/index.vue

@@ -45,10 +45,12 @@
 import { reactive, ref, watch, computed, toRaw } from 'vue';
 import { createComponent } from '@/utils/create';
 import column from './Column.vue';
+import popup from '@/packages/popup/index.vue';
 import { commonProps } from './commonProps';
 const { create } = createComponent('picker');
 
 export default create({
+  children: [column, popup],
   props: {
     isVisible: {
       type: Boolean,
@@ -60,7 +62,6 @@ export default create({
     },
     ...commonProps
   },
-  components: { column },
   emits: ['close', 'confirm', 'update:isVisible'],
 
   setup(props, { emit }) {

+ 1 - 3
src/packages/popup/index.vue

@@ -105,9 +105,7 @@ const popupProps = {
 };
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     ...overlayProps,
     ...popupProps

+ 1 - 1
src/packages/price/index.vue

@@ -26,7 +26,7 @@ export default create({
       default: false
     }
   },
-  components: {},
+
   setup(props) {
     const priceShow = computed(() => {
       const symbol = props.needSymbol

+ 1 - 1
src/packages/pullrefresh/index.vue

@@ -86,7 +86,7 @@ export default create({
       }
     }
   },
-  components: {},
+
   emits: ['refresh', 'downRefresh'], // refresh 上拉加载、右滑加载更多  downRefresh 下拉刷新、左滑刷新
 
   setup(props, { emit }) {

+ 1 - 1
src/packages/radio/index.vue

@@ -50,7 +50,7 @@ export default create({
       default: true
     }
   },
-  components: {},
+
   emits: ['input', 'update:modelValue', 'change'],
   setup(props, { emit }) {
     const parentGroup = inject('radiogroup', {

+ 1 - 1
src/packages/range/index.vue

@@ -120,7 +120,7 @@ export default create({
       default: 0
     }
   },
-  components: {},
+
   emits: ['change', 'drag-end', 'drag-start', 'update:modelValue'],
 
   setup(props, { emit, slots }) {

+ 1 - 3
src/packages/rate/index.vue

@@ -25,9 +25,7 @@ import { createComponent } from '@/utils/create';
 const { componentName, create } = createComponent('rate');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     total: {
       type: [String, Number],

+ 1 - 3
src/packages/shortpassword/index.vue

@@ -48,9 +48,7 @@ import { createComponent } from '@/utils/create';
 const { create } = createComponent('shortpassword');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     title: {
       type: String,

+ 2 - 0
src/packages/swiper/index.vue

@@ -45,7 +45,9 @@ import { createComponent } from '@/utils/create';
 import { useTouch } from './use-touch';
 import { useExpose } from './use-expose';
 const { create } = createComponent('swiper');
+import swiperItem from '@/packages/swiperitem/index.vue';
 export default create({
+  children: [swiperItem],
   props: {
     width: {
       type: [Number, String],

src/packages/swiper-item/demo.vue → src/packages/swiperitem/demo.vue


src/packages/swiper-item/doc.md → src/packages/swiperitem/doc.md


src/packages/swiper-item/index.scss → src/packages/swiperitem/index.scss


src/packages/swiper-item/index.vue → src/packages/swiperitem/index.vue


+ 1 - 3
src/packages/tabbar/index.vue

@@ -10,9 +10,7 @@ import { createComponent } from '@/utils/create';
 const { create } = createComponent('tabbar');
 import tabbaritem from '@/packages/tabbaritem/index.vue';
 export default create({
-  components: {
-    [tabbaritem.name]: tabbaritem
-  },
+  children: [tabbaritem],
   props: {
     show: {
       type: [Number, String],

+ 1 - 5
src/packages/tabbaritem/index.vue

@@ -34,9 +34,7 @@ import {
 const { create } = createComponent('tabbar-item');
 import Icon from '@/packages/icon/index.vue';
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     tabTitle: {
       // 标签页的标题
@@ -59,8 +57,6 @@ export default create({
       default: ''
     }
   },
-
-  components: {},
   setup(props, ctx) {
     const parent: any = inject('parent');
     const state = reactive({

+ 1 - 1
src/packages/tabpanel/index.vue

@@ -14,7 +14,7 @@ export default create({
       default: ''
     }
   },
-  components: {},
+
   setup(props, ctx) {
     //
   }

+ 0 - 1
src/packages/temp/index.vue

@@ -20,7 +20,6 @@ export default create({
       default: ''
     }
   },
-  components: {},
   emits: ['click'],
 
   setup(props, { emit }) {

+ 1 - 3
src/packages/toast/index.vue

@@ -30,9 +30,7 @@ import { toRefs, toRef, reactive, computed, watch, onMounted } from 'vue';
 import { createComponent } from '@/utils/create';
 const { create } = createComponent('toast');
 export default create({
-  components: {
-    [Icon.name]: Icon
-  },
+  children: [Icon],
   props: {
     id: String,
     msg: String,

+ 1 - 3
src/packages/uploader/index.vue

@@ -51,6 +51,7 @@ export class FileItem {
   formData: FormData = new FormData();
 }
 export default create({
+  children: [Icon],
   props: {
     name: { type: String, default: 'file' },
     url: { type: String, default: '' },
@@ -86,9 +87,6 @@ export default create({
     onChange: { type: Function },
     customRequest: { type: Function }
   },
-  components: {
-    [Icon.name]: Icon
-  },
   emits: [
     'start',
     'progress',

+ 0 - 1
src/sites/mobile/App.vue

@@ -8,7 +8,6 @@ import { useRoute } from 'vue-router';
 import { isMobile } from '@/sites/assets/util';
 export default defineComponent({
   name: 'app',
-  components: {},
   setup() {
     const title = ref('NutUI');
     // 获取当前路由

+ 0 - 1
src/sites/mobile/components/Index.vue

@@ -32,7 +32,6 @@ import { defineComponent, reactive } from 'vue';
 import { nav, versions } from '@/config.json';
 export default defineComponent({
   name: 'doc',
-  components: {},
   setup() {
     return reactive({
       nav,

+ 4 - 0
src/utils/create/component.ts

@@ -8,6 +8,10 @@ export function createComponent(name: string) {
       _component.name = componentName;
       _component.install = (vue: App) => {
         vue.component(_component.name as string, _component);
+        _component?.children?.length &&
+          _component.children.forEach((item: any) => {
+            vue.component(item.name as string, item);
+          });
       };
       return defineComponent(_component);
     } as typeof defineComponent,

+ 54 - 0
vite.config.build.single.ts

@@ -0,0 +1,54 @@
+// 处理按需加载
+
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+import Markdown from 'vite-plugin-md';
+import path from 'path';
+import config from './package.json';
+// https://vitejs.dev/config/
+
+const banner = `/*!
+* ${config.name} v${config.version} ${new Date()}
+* (c) 2021 @jdf2e.
+* Released under the MIT License.
+*/`;
+
+export default defineConfig({
+  resolve: {
+    alias: [{ find: '@', replacement: path.resolve(__dirname, './src') }]
+  },
+  css: {
+    preprocessorOptions: {
+      scss: {
+        // example : additionalData: `@import "./src/design/styles/variables";`
+        // dont need include file extend .scss
+        additionalData: `@import "@/styles/variables.scss";@import "@/sites/assets/styles/variables.scss";`
+      }
+    }
+  },
+  plugins: [
+    vue({
+      include: [/\.vue$/, /\.md$/]
+    }),
+    Markdown()
+  ],
+  build: {
+    rollupOptions: {
+      // 请确保外部化那些你的库中不需要的依赖
+      external: ['vue'],
+      output: {
+        banner,
+        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
+        globals: {
+          vue: 'Vue'
+        }
+      }
+    },
+    lib: {
+      entry: 'src/nutui.ts',
+      name: 'nutui',
+      formats: ['es', 'umd']
+    },
+    emptyOutDir: false
+  }
+});