expose-loader不会公开对暴露对象的修改

时间:2018-01-09 22:31:44

标签: javascript twitter-bootstrap typescript twitter-bootstrap-3 webpack

我正在使用Webpack 2,Bootstrap 3和TypeScript,并尝试将npm和打包的bundle集成到现有的应用程序中。我使用ProvidePlugin使jQuery可用,并expose-loader将jQuery暴露给外部依赖项。

(<any> global).$ = global.jQuery = $;或webpack module: { rules [{}] }配置的任意组合都不起作用,但最终我得到以下工作:

plugins: ([
    // make sure we allow any jquery usages outside of our webpack modules
    new webpack.ProvidePlugin({
        $: "jquery",
        jQuery: "jquery",
        jquery: "jquery",
        "window.jQuery": "jquery",
        "window.$": "jquery"
    }),
]),

entry.ts:

import "expose-loader?$!jquery"
import "expose-loader?jQuery!jquery"

然而,当我尝试拨打import "bootstrap"时,我可以在我的模块中拨打$(...).popover(),我可以在模块外拨打$(...)jQuery(...),但我可以& #39; t在模块外调用$(...).popover,而不是我收到此错误:

  

未捕获的TypeError:$(...)。popover不是函数

如何在模块之外的全局范围内创建添加到jQuery的方法(如bootstrap popover方法)?

1 个答案:

答案 0 :(得分:1)

我发现了我的问题: PluginProvider向应用程序公开了不同版本的jQuery,而expose-loader正在公开。 Bootstrap正在初始化PluginProvider jQuery,但jQuery的另一个实例正在向window公开。

为了使其正常工作,请删除PluginProvider 并使用expose-loader。并在需要的地方手动导入jQuery,作为失去PluginProvider的副作用。