uni-oaview 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ 本组件项目不能直接运行,查看效果下载 https://gitlab.mockuai.com/FrontToClient/mk-uview
@@ -0,0 +1,38 @@
1
+ <template>
2
+ <view
3
+ class="log-item"
4
+ v-for="log in consoleLogs"
5
+ style="font-size: 10px; width: calc(100vw - 16px); word-break: break-all"
6
+ >
7
+ {{ log }}
8
+ </view>
9
+ </template>
10
+ <script lang="ts" setup>
11
+ import { onBeforeUnmount, ref } from 'vue';
12
+ import { consoleSubject, getConsoleLogs } from 'uniapp-log-sdk';
13
+ const logConvert = (items) =>
14
+ items.reduce((prev, current, index) => {
15
+ try {
16
+ prev +=
17
+ typeof current === 'object'
18
+ ? JSON.stringify(current)
19
+ : current + '' + (index === items.length - 1 ? '' : ',');
20
+ } catch (e) {
21
+ prev + current;
22
+ }
23
+ return prev;
24
+ }, '');
25
+ const consoleLogs = ref<string[]>(getConsoleLogs().map(logConvert));
26
+ const stop = consoleSubject.subscribe((data: any) => {
27
+ consoleLogs.value = data.map(logConvert);
28
+ });
29
+ onBeforeUnmount(() => {
30
+ stop?.unsubscribe();
31
+ });
32
+ </script>
33
+
34
+ <style lang="scss" scoped>
35
+ .log-item:nth-of-type(odd) {
36
+ background-color: #eee;
37
+ }
38
+ </style>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <view
3
+ class="log-item"
4
+ v-for="log in errorLogs"
5
+ :key="log.toString()"
6
+ style="font-size: 10px; width: calc(100vw - 16px); word-break: break-all"
7
+ >
8
+ {{ JSON.stringify(log) }}
9
+ </view>
10
+ </template>
11
+ <script lang="ts" setup>
12
+ import { ref, onBeforeUnmount } from 'vue';
13
+ import { errorSubject, getErrorLogs } from 'uniapp-log-sdk';
14
+ const errorLogs = ref<Record<string, any>[]>([...new Set(getErrorLogs()?.map((item) => item.join(';')))]);
15
+ const stop = errorSubject.subscribe((data: Record<string, any>[]) => {
16
+ errorLogs.value = [...new Set(data?.map((item) => item.join(';')))];
17
+ });
18
+ onBeforeUnmount(() => {
19
+ stop?.unsubscribe();
20
+ });
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ .log-item {
25
+ color: red;
26
+ }
27
+ </style>
@@ -0,0 +1,93 @@
1
+ <template>
2
+ <u-popup v-if="show" :show="show" @close="() => (show = false)" @open="() => (show = true)">
3
+ <view style="height: 1000rpx">
4
+ <u-subsection :list="list" :current="current" @change="(index) => (current = index)"></u-subsection>
5
+ <view style="height: calc(100% - 48px); overflow-y: auto; padding: 8px">
6
+ <template v-if="current === 0">
7
+ <Console />
8
+ </template>
9
+ <template v-if="current === 1">
10
+ <Network />
11
+ </template>
12
+ <template v-if="current === 2">
13
+ <NativeEvent />
14
+ </template>
15
+ <template v-if="current === 3">
16
+ <Error />
17
+ </template>
18
+ <template v-if="current === 4">
19
+ <Storage />
20
+ </template>
21
+ <template v-if="current === 5">
22
+ <System />
23
+ </template>
24
+ </view>
25
+ </view>
26
+ </u-popup>
27
+ <view
28
+ v-if="isShowDebugButton"
29
+ @click="openDebug"
30
+ class="debug-button"
31
+ :style="{
32
+ bottom: bottom + 'px',
33
+ right: right + 'px',
34
+ }"
35
+ @touchstart="start"
36
+ @touchmove="move"
37
+ >
38
+ <image style="width: 40rpx; height: 40rpx" src="@/static/icon/debug.svg" />
39
+ </view>
40
+ </template>
41
+
42
+ <script lang="ts" setup>
43
+ import { ref } from 'vue';
44
+ import Network from './network.vue';
45
+ import NativeEvent from './native-event.vue';
46
+ import Error from './error.vue';
47
+ import Storage from './storage.vue';
48
+ import Console from './console.vue';
49
+ import System from './system.vue';
50
+ const whiteUrls = ['http://192.168.12.175:6174', 'http://192.168.10.11:6174'];
51
+ const show = ref(false);
52
+ const isShowDebugButton = ref(whiteUrls.includes(uni.getStorageSync('baseUrl')));
53
+ const list = ref(['console', 'network', 'event', 'error', 'storage', 'system']);
54
+ const current = ref(0);
55
+ const openDebug = () => {
56
+ show.value = true;
57
+ };
58
+ uni.$once('show-debug-button', () => {
59
+ isShowDebugButton.value = true;
60
+ });
61
+ const bottom = ref(200);
62
+ const right = ref(10);
63
+ let pageX, pageY;
64
+ const start = (e) => {
65
+ let page = e.changedTouches[0];
66
+ pageX = page.pageX;
67
+ pageY = page.pageY;
68
+ };
69
+ const move = (e) => {
70
+ let page = e.changedTouches[0];
71
+ let x = page.pageX - pageX;
72
+ let y = page.pageY - pageY;
73
+ pageX = page.pageX;
74
+ pageY = page.pageY;
75
+ right.value = right.value - x;
76
+ bottom.value = bottom.value - y;
77
+ };
78
+ </script>
79
+
80
+ <style lang="scss" scoped>
81
+ .debug-button {
82
+ width: 80rpx;
83
+ height: 80rpx;
84
+ position: fixed;
85
+ z-index: 1000;
86
+ border-radius: 50%;
87
+ display: flex;
88
+ justify-content: center;
89
+ align-items: center;
90
+ box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
91
+ background-color: white;
92
+ }
93
+ </style>
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <u-collapse>
3
+ <u-collapse-item v-for="log in nativeEventLogs" :title="getTitle(log)" :key="log.key">
4
+ <view style="font-size: 10px">
5
+ <view style="word-break: break-all">
6
+ <text style="font-weight: bolder">发送数据:</text>
7
+ {{ JSON.stringify(log.params) }}
8
+ </view>
9
+ <view style="word-break: break-all">
10
+ <text style="font-weight: bolder">接收数据:</text>
11
+ {{ JSON.stringify(log.response) }}
12
+ </view>
13
+ </view>
14
+ </u-collapse-item>
15
+ </u-collapse>
16
+ </template>
17
+ <script lang="ts" setup>
18
+ import { ref, onBeforeUnmount } from 'vue';
19
+ import { nativeEventSubject, getNativeEventLogs } from 'uniapp-log-sdk';
20
+ const nativeEventLogs = ref<Record<string, any>[]>(getNativeEventLogs());
21
+ const stop = nativeEventSubject.subscribe((data) => {
22
+ nativeEventLogs.value = data;
23
+ });
24
+ const getTitle = (log: any) => {
25
+ const { startTime, endTime, key } = log;
26
+ if (startTime && endTime) {
27
+ return `${key};${(endTime - startTime) / 1000}s`;
28
+ }
29
+ return key;
30
+ };
31
+ onBeforeUnmount(() => {
32
+ stop?.unsubscribe();
33
+ });
34
+ </script>
35
+
36
+ <style lang="scss" scoped>
37
+ .u-collapse-content {
38
+ font-size: 12px;
39
+ }
40
+ ::v-deep {
41
+ .u-cell__title-text {
42
+ font-size: 10px;
43
+ }
44
+ }
45
+ </style>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <u-collapse>
3
+ <u-collapse-item
4
+ v-for="log in networkLogs"
5
+ :title="getTitle(log)"
6
+ :key="log.request.url + log.response?.data?.errno"
7
+ :class="{ 'u-collapse-item-failed': log.response?.statusCode !== 200 || log.response?.data?.errno !== 0 }"
8
+ >
9
+ <view style="font-size: 10px">
10
+ <view style="word-break: break-all">
11
+ <text style="font-weight: bolder">状态码:</text>
12
+ {{ log.request.method }} {{ log.response?.statusCode }}
13
+ </view>
14
+ <view style="word-break: break-all">
15
+ <text style="font-weight: bolder">请求头:</text>
16
+ {{ JSON.stringify(log.request.header) }}
17
+ </view>
18
+ <view style="word-break: break-all">
19
+ <text style="font-weight: bolder">请求参数:</text>
20
+ {{ JSON.stringify(log.request.data) }}
21
+ </view>
22
+ <view style="word-break: break-all">
23
+ <text style="font-weight: bolder">响应数据:</text>
24
+ {{ JSON.stringify(log.response) }}
25
+ </view>
26
+ </view>
27
+ </u-collapse-item>
28
+ </u-collapse>
29
+ </template>
30
+
31
+ <script lang="ts" setup>
32
+ import { ref, onBeforeUnmount } from 'vue';
33
+ import { networkSubject, getNetworkLogs } from 'uniapp-log-sdk';
34
+ const networkLogs = ref<{ request: any; response: any; startTime; endTime }[]>(getNetworkLogs());
35
+ const stop = networkSubject.subscribe((data) => {
36
+ networkLogs.value = data;
37
+ });
38
+ const getTitle = (log: any) => {
39
+ const { startTime, endTime, request } = log;
40
+ if (startTime && endTime) {
41
+ return `${request.url};${(endTime - startTime) / 1000}s`;
42
+ }
43
+ return request.url;
44
+ };
45
+ onBeforeUnmount(() => {
46
+ stop?.unsubscribe();
47
+ });
48
+ </script>
49
+
50
+ <style lang="scss" scoped>
51
+ .u-collapse-content {
52
+ font-size: 12px;
53
+ }
54
+ ::v-deep {
55
+ .u-cell__title-text {
56
+ font-size: 10px;
57
+ }
58
+ .u-collapse-item-failed {
59
+ .u-cell__title-text {
60
+ color: red !important;
61
+ }
62
+ }
63
+ }
64
+ </style>
@@ -0,0 +1,34 @@
1
+ <template>
2
+ <u-collapse>
3
+ <u-collapse-item v-for="log in storageLogs" :title="log.key" :key="log.key">
4
+ <text style="font-size: 10px; word-break: break-all">
5
+ {{ log.data }}
6
+ </text>
7
+ </u-collapse-item>
8
+ </u-collapse>
9
+ </template>
10
+ <script lang="ts" setup>
11
+ import { ref } from 'vue';
12
+ const storageLogs = ref<Record<string, any>[]>([]);
13
+ uni.getStorageInfo({
14
+ success: function (res) {
15
+ res.keys?.forEach((key) => {
16
+ storageLogs.value.push({
17
+ key,
18
+ data: JSON.stringify(uni.getStorageSync(key)),
19
+ });
20
+ });
21
+ },
22
+ });
23
+ </script>
24
+
25
+ <style lang="scss" scoped>
26
+ .u-collapse-content {
27
+ font-size: 12px;
28
+ }
29
+ ::v-deep {
30
+ .u-cell__title-text {
31
+ font-size: 10px;
32
+ }
33
+ }
34
+ </style>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <view class="system">
3
+ <view>小程序版本:{{ appVersion }}</view>
4
+ <view>小程序名称:{{ appName }}</view>
5
+ <view>手机型号:{{ deviceBrand }}</view>
6
+ <view>手机系统版本:{{ osVersion }}</view>
7
+ </view>
8
+ </template>
9
+ <script lang="ts" setup>
10
+ const { appVersion, appName, osVersion, deviceBrand } = uni.getSystemInfoSync() as any;
11
+ </script>
12
+
13
+ <style lang="scss" scoped>
14
+ .system {
15
+ font-size: 12px;
16
+ }
17
+ </style>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <Logs />
3
+ <view @click="clickHandler">
4
+ <slot />
5
+ </view>
6
+ </template>
7
+ <script lang="ts" setup>
8
+ import Logs from '../logs/index.vue';
9
+ let isLock = false;
10
+ setTimeout(function () {
11
+ isLock = true;
12
+ }, 10000);
13
+ const secretArray: number[] = [];
14
+ const secret = '1314';
15
+ const createSecretFunction = (count: number) => {
16
+ let clickCount = 0;
17
+ let timer = null as any;
18
+ return () => {
19
+ clickCount++;
20
+ clearTimeout(timer);
21
+ timer = setTimeout(() => {
22
+ if (clickCount === count) {
23
+ secretArray.push(count);
24
+ if (secretArray.join('') === secret) {
25
+ uni.$emit('show-debug-button');
26
+ }
27
+ } else {
28
+ clickCount = 0;
29
+ }
30
+ }, 1000);
31
+ };
32
+ };
33
+ const functions = [1, 3, 4].map(createSecretFunction);
34
+ const clickHandler = () => {
35
+ if (isLock) {
36
+ return;
37
+ }
38
+ functions.forEach((f) => {
39
+ f();
40
+ });
41
+ };
42
+ </script>
@@ -0,0 +1,52 @@
1
+ $bg-color: white;
2
+ $row-height: 32rpx;
3
+ $row-margin-top: 32rpx;
4
+
5
+ .skeleton {
6
+ display: flex;
7
+ padding: 32rpx 0;
8
+ }
9
+ .skeleton-avatar {
10
+ flex-shrink: 0;
11
+ background: $bg-color;
12
+ margin-right: 16rpx;
13
+ }
14
+ .skeleton-avatar.round {
15
+ border-radius: 50%;
16
+ }
17
+
18
+ .skeleton-content {
19
+ width: 100%;
20
+ }
21
+
22
+ .skeleton-title {
23
+ background-color: $bg-color;
24
+ height: $row-height;
25
+ }
26
+
27
+ .skeleton-title + .skeleton-rows {
28
+ margin-top: $row-margin-top;
29
+ }
30
+ .skeleton-row-item {
31
+ background-color: $bg-color;
32
+ height: $row-height;
33
+ }
34
+ .skeleton-row-item:not(:first-child) {
35
+ margin-top: $row-margin-top;
36
+ }
37
+
38
+ .skeleton.animate {
39
+ animation: skeleton-blink 1.2s ease-in-out infinite;
40
+ }
41
+
42
+ @keyframes skeleton-blink {
43
+ 0% {
44
+ opacity: 1;
45
+ }
46
+ 50% {
47
+ opacity: 0.6;
48
+ }
49
+ 100% {
50
+ opacity: 1;
51
+ }
52
+ }
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <view>
3
+ <!-- 为了解决H5中v-if导致样式失效的问题,故使用v-show -->
4
+ <view v-show="loading">
5
+ <view class="skeleton" :class="{ animate: animate }">
6
+ <view
7
+ v-if="displayAvatar"
8
+ class="skeleton-avatar"
9
+ :class="[displayAvatarShape]"
10
+ :style="{ width: displayAvatarSize, height: displayAvatarSize }"
11
+ ></view>
12
+ <view class="skeleton-content">
13
+ <view v-if="showTitle" class="skeleton-title" :style="{ width: titleWidth, height: rowHeight }"></view>
14
+ <view class="skeleton-rows">
15
+ <view
16
+ v-for="(item, index) in rowList"
17
+ :key="index"
18
+ class="skeleton-row-item"
19
+ :style="{ width: item.width, height: rowHeight }"
20
+ ></view>
21
+ </view>
22
+ </view>
23
+ </view>
24
+ </view>
25
+ <view v-show="!loading"><slot></slot></view>
26
+ </view>
27
+ </template>
28
+
29
+ <script lang="ts" setup>
30
+ import { computed, PropType } from 'vue';
31
+ const DEFAULT_ROW_WIDTH = '100%';
32
+ const DEFAULT_LAST_ROW_WIDTH = '100%';
33
+
34
+ const props = defineProps({
35
+ loading: Boolean,
36
+ showAvatar: Boolean,
37
+ avatarSize: String,
38
+ showTitle: Boolean,
39
+ titleWidth: {
40
+ type: String,
41
+ default: '40%',
42
+ },
43
+ row: {
44
+ type: Number,
45
+ default: 5,
46
+ },
47
+ rowHeight: {
48
+ type: String,
49
+ default: '80rpx',
50
+ },
51
+ animate: {
52
+ type: Boolean,
53
+ default: true,
54
+ },
55
+ avatarShape: {
56
+ type: String as PropType<'square' | 'round'>,
57
+ default: '',
58
+ },
59
+ });
60
+ const rowList = computed(() => {
61
+ const arr: Array<any> = [];
62
+ for (let i = 0; i < props.row; i++) {
63
+ arr.push({ width: i === props.row - 1 && i !== 0 ? DEFAULT_LAST_ROW_WIDTH : DEFAULT_ROW_WIDTH });
64
+ }
65
+ return arr;
66
+ });
67
+ props.avatarSize;
68
+ const displayAvatar = computed(() => props.avatarShape || props.showAvatar || props.avatarSize);
69
+ const displayAvatarShape = computed(() => props.avatarShape || 'round');
70
+ const displayAvatarSize = computed(() => props.avatarSize || '100rpx');
71
+ </script>
72
+
73
+ <style lang="scss" scoped src="./oa-skeleton.scss"></style>
@@ -0,0 +1,52 @@
1
+ $bg-color: white;
2
+ $row-height: 32rpx;
3
+ $row-margin-top: 32rpx;
4
+
5
+ .skeleton {
6
+ display: flex;
7
+ padding: 32rpx;
8
+ }
9
+ .skeleton-avatar {
10
+ flex-shrink: 0;
11
+ background: $bg-color;
12
+ margin-right: 16rpx;
13
+ }
14
+ .skeleton-avatar.round {
15
+ border-radius: 50%;
16
+ }
17
+
18
+ .skeleton-content {
19
+ width: 100%;
20
+ }
21
+
22
+ .skeleton-title {
23
+ background-color: $bg-color;
24
+ height: $row-height;
25
+ }
26
+
27
+ .skeleton-title + .skeleton-rows {
28
+ margin-top: $row-margin-top;
29
+ }
30
+ .skeleton-row-item {
31
+ background-color: $bg-color;
32
+ height: $row-height;
33
+ }
34
+ .skeleton-row-item:not(:first-child) {
35
+ margin-top: $row-margin-top;
36
+ }
37
+
38
+ .skeleton.animate {
39
+ animation: skeleton-blink 1.2s ease-in-out infinite;
40
+ }
41
+
42
+ @keyframes skeleton-blink {
43
+ 0% {
44
+ opacity: 1;
45
+ }
46
+ 50% {
47
+ opacity: 0.6;
48
+ }
49
+ 100% {
50
+ opacity: 1;
51
+ }
52
+ }
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <view>
3
+ <!-- 为了解决H5中v-if导致样式失效的问题,故使用v-show -->
4
+ <view v-show="loading">
5
+ <view class="skeleton" :class="{ animate: animate }">
6
+ <view
7
+ v-if="displayAvatar"
8
+ class="skeleton-avatar"
9
+ :class="[displayAvatarShape]"
10
+ :style="{ width: displayAvatarSize, height: displayAvatarSize }"
11
+ ></view>
12
+ <view class="skeleton-content">
13
+ <view v-if="showTitle" class="skeleton-title" :style="{ width: titleWidth, height: rowHeight }"></view>
14
+ <view class="skeleton-rows">
15
+ <view
16
+ v-for="(item, index) in rowList"
17
+ :key="index"
18
+ class="skeleton-row-item"
19
+ :style="{ width: item.width, height: rowHeight }"
20
+ ></view>
21
+ </view>
22
+ </view>
23
+ </view>
24
+ </view>
25
+ <view v-show="!loading"><slot></slot></view>
26
+ </view>
27
+ </template>
28
+
29
+ <script lang="ts">
30
+ import { computed } from '@mk/composition-api';
31
+ import Vue from 'vue';
32
+
33
+ const DEFAULT_ROW_WIDTH = '100%';
34
+ const DEFAULT_LAST_ROW_WIDTH = '60%';
35
+
36
+ export default Vue.extend({
37
+ props: {
38
+ loading: {
39
+ type: Boolean,
40
+ default: false,
41
+ },
42
+ /** 是否展示图片 */
43
+ showAvatar: {
44
+ type: Boolean,
45
+ default: false,
46
+ },
47
+ /** 展示图片的尺寸 */
48
+ avatarSize: {
49
+ type: String,
50
+ default: '',
51
+ },
52
+ /** 图片的形状 */
53
+ avatarShape: {
54
+ type: String,
55
+ default: '', // square | round
56
+ },
57
+ /** 是否展示标题条 */
58
+ showTitle: {
59
+ type: Boolean,
60
+ default: false,
61
+ },
62
+ /** 标题条的宽度 */
63
+ titleWidth: {
64
+ type: String,
65
+ default: '40%',
66
+ },
67
+ /** 需要展示几行 */
68
+ row: {
69
+ type: Number,
70
+ default: 3,
71
+ },
72
+ /** 行高 */
73
+ rowHeight: {
74
+ type: String,
75
+ default: '32rpx',
76
+ },
77
+ /** 是否展示动画 */
78
+ animate: {
79
+ type: Boolean,
80
+ default: true,
81
+ },
82
+ },
83
+ setup(props: any) {
84
+ const rowList = computed(() => {
85
+ const arr: Array<any> = [];
86
+ for (let i = 0; i < props.row; i++) {
87
+ arr.push({ width: i === props.row - 1 && i !== 0 ? DEFAULT_LAST_ROW_WIDTH : DEFAULT_ROW_WIDTH });
88
+ }
89
+ return arr;
90
+ });
91
+ const displayAvatar = computed(() => props.avatarShape || props.showAvatar || props.avatarSize);
92
+ const displayAvatarShape = computed(() => props.avatarShape || 'round');
93
+ const displayAvatarSize = computed(() => props.avatarSize || '100rpx');
94
+ return {
95
+ rowList,
96
+ displayAvatar,
97
+ displayAvatarShape,
98
+ displayAvatarSize,
99
+ };
100
+ },
101
+ });
102
+ </script>
103
+
104
+ <style lang="scss" scoped src="./skeleton.scss"></style>
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ install: (Vue: any) => void;
3
+ };
4
+
5
+ export { _default as default };
@@ -0,0 +1,16 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["UNI-OAVIEW"] = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ var install = function install(Vue) {};
8
+ var index = {
9
+ install: install
10
+ };
11
+
12
+ exports["default"] = index;
13
+
14
+ Object.defineProperty(exports, '__esModule', { value: true });
15
+
16
+ }));
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "uni-oaview",
3
+ "version": "1.0.0",
4
+ "description": "uniapp小程序组件库",
5
+ "main": "dist/index.umd.js",
6
+ "typings": "dist/index.d.ts",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "components"
11
+ ],
12
+ "author": "",
13
+ "license": "ISC",
14
+ "scripts": {
15
+ "dev": "rimraf dist typings && tsc --emitDeclarationOnly && cross-env NODE_ENV=development rollup -c --watch",
16
+ "build": "rimraf dist typings && tsc --emitDeclarationOnly && cross-env NODE_ENV=production rollup -c",
17
+ "prepublish": "npm run build"
18
+ },
19
+ "devDependencies": {
20
+ "@babel/cli": "^7.14.5",
21
+ "@babel/core": "^7.14.6",
22
+ "@babel/preset-env": "^7.14.7",
23
+ "@rollup/plugin-commonjs": "^17.1.0",
24
+ "@rollup/plugin-json": "^4.1.0",
25
+ "@rollup/plugin-node-resolve": "^11.2.0",
26
+ "@rollup/plugin-replace": "^2.4.2",
27
+ "cross-env": "^7.0.2",
28
+ "rimraf": "^3.0.2",
29
+ "rollup": "^2.26.11",
30
+ "rollup-plugin-alias": "^2.2.0",
31
+ "rollup-plugin-babel": "^4.4.0",
32
+ "rollup-plugin-clean": "^1.0.0",
33
+ "rollup-plugin-dts": "^1.4.13",
34
+ "rollup-plugin-eslint": "^7.0.0",
35
+ "rollup-plugin-terser": "^7.0.2",
36
+ "rollup-plugin-typescript2": "^0.27.2",
37
+ "typescript": "^4.0.2"
38
+ },
39
+ "dependencies": {
40
+ "uniapp-log-sdk": "^1.1.1"
41
+ }
42
+ }