refactor(import): 优化代码引入方式和结构,减低打包体积
- 将全局引入 iView 改为按需引入,提高加载性能 - 优化 Monaco Editor 的引入方式,仅引入必要的模块和功能 - 添加 babel-plugin-import 插件配置,支持按需引入组件 - 更新 package.json,增加 build:report 脚本 - 新增 iview-import.js 工具文件,用于按需引入 iView 组件
This commit is contained in:
parent
acffd002dd
commit
682fa7e458
|
@ -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'
|
||||||
|
]
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
|
@ -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: {
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
Loading…
Reference in New Issue