现代化前端的全局引入 —— ProvidePlugin

在Vue项目中,为了使用import一直引入造成不必要工作量,且import进来之后的自定义名称可能会不统一,导致全局搜索困难,我们可以使用ProvidePlugin引入实践,增强代码可读性和可维护性

1、webpack的plugins中增加$_的配置

// webpack.base.config.js
plugins: [
    new webpack.ProvidePlugin({
      $_: 'lodash',
    }),
],

eslint的globals增加$_的配置

// .eslintrc.js
globals: {
    $_: 'readonly', // 或者true
},

配置为readonly是因为我们不会改写lodash,仅仅是调用其方法

2、在Vue中使用

在 vue.config.js 文件中:

const path = require('path');
const webpack = require('webpack')

module.exports = {
    configureWebpack: {
		resolve: {
			alias: {
				'@': resolve('src'),
				xxx$: path.resolve(__dirname, "./xxx_1.0.0.min.js")
			}
		},
		plugins: [
          new webpack.ProvidePlugin({
            xxx: 'xxx'
          })
        ],
	},
}

使用

<script>

    let { commonUtils, modelUtils } = xxx

</script>

3、在Vue的template中使用的注意事项

ProvidePlugin注入的全局变量,在script中是完全没有问题的,但是在template中,Vue的模板语法中,不支持直接对以$或者_开头的自定义data属性,目的是避免与Vue的内部冲突

解决方式:

1. 通过$data.$_访问

<p>{{$data.$_(...)}</p>

2. data中重命名后绑定

<p>{{globalLodash(...)}</p>

data() {
    return {
          globalLodash: $_,
    }
}

3. methods中绑定(最推荐)

因为ProvidePlugin最终返回给我们的,是一个hooks函数,既然是一个函数,那么它其实就是一个method。由于需要在vue的template中使用,所以需要将其挂载到vue实例上。因此直接在methods中绑定,挂载到vue示例。

<p>{{$_(...)}</p>

methods: {
    $_
}

 

参考资料:

实用webpack插件之ProvidePlugin

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值