Webpack之Shimming

本文探讨了Webpack打包后的模块耦合度低导致的问题,即在不同模块间无法共享全局变量的情况。通过引入lodash库作为示例,详细讲解了如何使用Webpack的ProvidePlugin插件来全局提供lodash,以及如何利用imports-loader使模块内的this指向window对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

引入

首先在index.js内写如下内容:

import _ lodash from 'lodash';
import { test } from './test';
console.log(_.join(['a','b','c'], ''));

然后在test.js中:

console.log(_.join(['1','2','3'], ''));

打包后在浏览器中打开,控制台是会输出一个错误的。错误是说“_”是未定义的。明明我们在index.js中引入了lodash为什么还说未定义呢?

原因在于Webpack打包之后,各模块之间耦合度非常低,模块中引入的东西只能在本模块内生效。

要想解决这个问题,可以在test.js顶部添加一行代码将lodash重新引入。

不过如果使用的是第三方模块,模块内使用了大量的全局变量该怎么办?

这就需要用到ProvidePlugin这个插件了。

使用

在Webpack的配置文件中配置:

const webpack = require('webpack');
module.exports = {
    plugins: [
        webpack.ProvidePlugin({
            _: 'lodash'
        })
    ]
}

这样配置之后,Webpack遇到“_”就会自动引入lodash

this

在模块中,this并不是指向window对象,而是指向module.exports

如果我们想让this指向window对象,我们需要用到imports-loader

在配置文件中配置:

{
    module: {
        rules: [
            {
                test: /\.css$/,
                use: 'imports-loader?this=>window'
            }
        ]
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值