refactor(import): 优化代码引入方式和结构,减低打包体积

- 将全局引入 iView 改为按需引入,提高加载性能
- 优化 Monaco Editor 的引入方式,仅引入必要的模块和功能
- 添加 babel-plugin-import 插件配置,支持按需引入组件
- 更新 package.json,增加 build:report 脚本
- 新增 iview-import.js 工具文件,用于按需引入 iView 组件
This commit is contained in:
fhysy 2025-05-29 11:06:09 +08:00
parent acffd002dd
commit 682fa7e458
6 changed files with 63 additions and 6 deletions

View File

@ -9,5 +9,15 @@ module.exports = {
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages. // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
'plugins': ['dynamic-import-node'] 'plugins': ['dynamic-import-node']
} }
} },
'plugins': [
[
'import',
{
'libraryName': 'iview',
'libraryDirectory': 'src/components'
},
'iview'
]
]
} }

View File

@ -16,7 +16,8 @@
"build:ccprod": "vue-cli-service build --mode ccprod", "build:ccprod": "vue-cli-service build --mode ccprod",
"build:stage": "vue-cli-service build --mode staging", "build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview", "preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src" "lint": "eslint --ext .js,.vue src",
"build:report": "vue-cli-service build --report"
}, },
"husky": { "husky": {
"hooks": { "hooks": {
@ -73,6 +74,7 @@
"sass-loader": "^7.0.1", "sass-loader": "^7.0.1",
"save": "^2.5.0", "save": "^2.5.0",
"screenfull": "5.0.2", "screenfull": "5.0.2",
"smartpower": "file:",
"sortablejs": "1.10.2", "sortablejs": "1.10.2",
"vue": "2.6.12", "vue": "2.6.12",
"vue-amap": "^0.5.10", "vue-amap": "^0.5.10",
@ -91,6 +93,7 @@
"@vue/cli-plugin-eslint": "4.4.6", "@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6", "@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0", "babel-eslint": "10.1.0",
"babel-plugin-import": "^1.13.8",
"chalk": "4.1.0", "chalk": "4.1.0",
"compression-webpack-plugin": "2.0.0", "compression-webpack-plugin": "2.0.0",
"connect": "3.6.6", "connect": "3.6.6",

View File

@ -27,8 +27,11 @@ import dataV from '@jiaminghi/data-view'
// import VueCron from 'vue-cron'; // import VueCron from 'vue-cron';
// 自定义表格工具扩展 // 自定义表格工具扩展
import RightToolbar from "@/components/RightToolbar" import RightToolbar from "@/components/RightToolbar"
import iView from 'iview' // 将全局引入 iView 改为按需引入
// import iView from 'iview'
// import 'iview/dist/styles/iview.css'
import 'iview/dist/styles/iview.css' import 'iview/dist/styles/iview.css'
import '@/utils/iview-import' // 按需引入 iView 组件
import VueAMap from 'vue-amap'; import VueAMap from 'vue-amap';
@ -61,7 +64,7 @@ Vue.prototype.msgInfo = function (msg) {
// 全局组件挂载 // 全局组件挂载
Vue.component('Pagination', Pagination) Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar) Vue.component('RightToolbar', RightToolbar)
Vue.use(iView) // Vue.use(iView) // 已改为按需引入
Vue.use(dataV) Vue.use(dataV)
Vue.use(VueClipboard) Vue.use(VueClipboard)
Vue.use(VueAMap); Vue.use(VueAMap);

37
src/utils/iview-import.js Normal file
View File

@ -0,0 +1,37 @@
import Vue from 'vue'
import {
Card,
Tabs,
TabPane,
Table,
DatePicker,
Tooltip,
Input,
RadioGroup,
Radio,
InputNumber,
CheckboxGroup,
Checkbox,
Select,
Option,
Modal,
Icon
} from 'iview'
// 按需引入 iView 组件
Vue.component('Card', Card)
Vue.component('Tabs', Tabs)
Vue.component('TabPane', TabPane)
Vue.component('Table', Table)
Vue.component('DatePicker', DatePicker)
Vue.component('Tooltip', Tooltip)
Vue.component('Input', Input)
Vue.component('RadioGroup', RadioGroup)
Vue.component('Radio', Radio)
Vue.component('InputNumber', InputNumber)
Vue.component('CheckboxGroup', CheckboxGroup)
Vue.component('Checkbox', Checkbox)
Vue.component('Select', Select)
Vue.component('Option', Option)
Vue.component('Modal', Modal)
Vue.component('Icon', Icon)

View File

@ -8,7 +8,8 @@ my-monaco-editor:
</template> </template>
<script> <script>
import * as monaco from 'monaco-editor' // import * as monaco from 'monaco-editor'
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
export default { export default {
props: { props: {

View File

@ -56,7 +56,10 @@ module.exports = {
{ from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf'}, { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf'},
{ from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'cdn/js/liveplayer/'}, { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'cdn/js/liveplayer/'},
]), ]),
new MonacoWebpackPlugin() new MonacoWebpackPlugin({
languages: ['json'],
features: ['bracketMatching', 'folding', 'hover'],
})
], ],
name: name, name: name,
resolve: { resolve: {