浅谈Vue CLI 3结合Lerna进行UI框架设计

2020-06-12 21:23:32易采站长站整理

minimize: false
},
// ...忽略
};

重点需要关注一下

config.externals
属性,打印输出该变量的值:


[{
vue: 'vue',
// 排除所有UI组件的源代码
'element-ui/packages/option':'element-ui/lib/option',
// ...
// 排除国际化的源代码
'element-ui/src/locale': 'element-ui/lib/locale',
// 排除utils方法的源代码
'element-ui/src/utils/vue-popper': 'element-ui/lib/utils/vue-popper',
'element-ui/src/mixins/emitter': 'element-ui/lib/mixins/emitter',
'element-ui/src/transitions/collapse-transition': 'element-ui/lib/transitions/collapse-transition'
// ...
},
// var nodeExternals = require('webpack-node-externals');
// nodeExternals()
[Function]];

externals属性可以将一些特定的依赖从输出的bundle中排除,例如在开发态中组件之间有依赖关系,

element-ui/packages/pagination
中引入
element-ui/packages/option
组件:

pagecages/pagination/src/pagination.js


// pagination组件中需要用到option组件
import ElOption from 'element-ui/packages/option';
// ...

Webpack构建后,可以发现在

element-ui.common.js
中并没有将
element-ui/packages/option
组件打包在内,而只是更改了它的引入路径
element-ui/lib/option
(在实现 按需引入 功能时会用
webpack --config build/webpack.component.js
脚本构建出该文件)。


// lib/element-ui.common.js
module.exports = require("element-ui/lib/option");

因此以上列出的

config.externals
属性的
key
value
可以排除 UI组件、支持国际化、utils方法 功能的代码。

config.externals
属性的最后一个值是
[Function]
,是由webpack-node-externals 生成的。这里解释一下
webpack-node-externals
的作用:

Webpack allows you to define externals – modules that should not be bundled. When bundling with Webpack for the backend – you usually don’t want to bundle its node_modules dependencies. This library creates an externals function that ignores node_modules when bundling in Webpack.