暴露加载器不会暴露对暴露对象的修改

Iro*_*ean 6 javascript twitter-bootstrap typescript twitter-bootstrap-3 webpack

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

(<any> global).$ = global.jQuery = $;或 webpackmodule: { 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"
    }),
]),
Run Code Online (Sandbox Code Playgroud)

条目.ts:

import "expose-loader?$!jquery"
import "expose-loader?jQuery!jquery"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用时,import "bootstrap"我可以$(...).popover()在我的模块内调用,也可以在模块外调用$(...)jQuery(...),但不能$(...).popover在模块外调用,而是收到此错误:

未捕获的类型错误:$(...).popover 不是函数

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

Iro*_*ean 1

我发现了我的问题: PluginProvider向应用程序公开了与公开版本不同的 jQuery 版本expose-loader。Bootstrap 正在 PluginProvider jQuery 上进行初始化,但 jQuery 的不同实例被暴露给window.

因此,要使其正常工作,请删除 PluginProvider并仅使用expose-loader. 并在您需要的地方手动导入 jQuery,这是丢失 PluginProvider 的副作用。