-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
实用webpack插件之ProvidePlugin #214
Comments
使用ProvidePlugin的三种方式// 语法
new webpack.ProvidePlugin({
identifier: 'module1',
// identifier: ['module1', 'property1'],
});
module.exports直接引入new webpack.ProvidePlugin({
$_: 'lodash',
}); 引入某个函数new webpack.ProvidePlugin({
$_uniqBy: ['lodash','uniqBy']
}); export defaultnew webpack.ProvidePlugin({
Vue: ['vue/dist/vue.esm.js', 'default']
}); |
为何一直引入造成不必要工作量加入我们有a~z,a.js到z.js总结26个js文件,每个文件都需要引入lodash。 // a.js
import $_ from 'lodash';
// b.js
import $_ from 'lodash';
// c.js
import $_ from 'lodash';
// d.js
import $_ from 'lodash';
// e.js
import $_ from 'lodash';
// f.js
import $_ from 'lodash';
...
// z.js
import $_ from 'lodash'; 这样做有以下几个弊端
比如说下面这种场景,对于代码可读性是很不好的。 // a.js
import $_ from 'lodash';
// b.js
import _ from 'lodash'; |
使用ProvidePlugin引入实践
webpack的plugins中增加$_的配置// webpack.base.config.js
plugins: [
new webpack.ProvidePlugin({
$_: 'lodash',
}),
], eslint的globals增加$_的配置// .eslintrc.js
globals: {
$_: 'readonly', // 或者true
}, 配置为readonly是因为我们不会改写lodash,仅仅是调用其方法。 在Vue中如何使用$_假设在a.js中。 在Vue的template中使用的注意事项ProvidePlugin注入的全局变量,在script中是完全没有问题的,但是在template中使用时会有一些小问题。 例如下面这样: <p>{{$_(...)}</p> data() {
return {
$_,
}
} 遇到这种情况是什么原因呢? [Vue warn]:
Property "$_" must be accessed with "$data.$_".
Because properties starting with "$" or "_" are not proxied in the Vue instance to prevent conflicts with Vue internals 有以下几种方式解决这个问题:
通过
|
思考注入的ProvidePlugin是一个什么东西?是一个hooks函数。 hooks () {
return hookCallback.apply(null, arguments);
} 使用ProvidePlugin后会比一直引入减小打包体积吗?不会。 使用ProvidePlugin有哪些注意事项?这些注意事项其实主要是为了增强代码可读性和可维护性。
看到这里,文章开头 快到你的项目中试试ProvidePlugin吧~ |
现代化前端的全局引入是一个很有趣的东西。
先来看下以下几个场景:
resolve: { alias: { '@': path.join(__dirname, '..', 'src') }}
。Vue.prototype.$_ = lodash
,在应用了vue的应用上下文中,可以通过this.$_获得对lodash的引用。来思考一个问题:
有没有更加优雅的解决办法?
再来思考一个问题:
有没有更加优雅的实现方式?
看一张一直引入moment,引了99次的图先来感受一下:
虽然我的项目中是在优化moment的引入,但是为了直观明了,我将以引入lodash为例。
The text was updated successfully, but these errors were encountered: