javascript - Webpack ProvidePlugin 全局变量(找不到模块)

标签 javascript typescript webpack

我是 Webpack 的新手,但无法弄清楚为什么我的 ProvidePlugin 调用没有按预期工作。

我有以下文件:

应用程序.js

var App = function() {
    getSomething: function(size) {}
}();

module.exports = App;

我希望这个“App”变量可以全局访问,因为其他文件是这样使用它的:

布局.js

var Layout = function () {
    App.getSomething('md');
}();

webpack.config.js

在 webpack.config.js 中我有以下行:

new webpack.ProvidePlugin({ App: 'app' })

这是我的条目:

entry: {
    'app': './angularApp/metronicapp.ts',
}

metronicapp.ts

import './metronic/global/scripts/app';

其中 app 是上面显示的我的 app.js

我在浏览器中收到以下错误: 找不到模块“app”

当我在控制台中编译 webpack 时: 未找到模块:错误:无法解析“app”

我不知道我错过了什么。我的 app.js 格式不正确吗?为什么 App 仍然无法在全局范围内使用?

最佳答案

webpack.config.js

ProvidePlugin 需要全局模块 App.js 的路径。

const path = require('path');
...
plugins: [
  new webpack.ProvidePlugin({
    App: path.resolve(__dirname, './path_to_App.js')
  })
]

global.d.ts

为了 Typescript 不要提示未定义的构造创建 global.d.ts

declare var App: any;

metronicapp.ts

无需在 metronicapp.ts 中导入 ./metronic/global/scripts/app,webpack 将在构建时解析 App

App.getSomething('foo');

布局.js

var Layout = function() {
  App.getSomething('md');
}();

关于javascript - Webpack ProvidePlugin 全局变量(找不到模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701378/

相关文章:

javascript - 带有 webpack : controller is not registered 的 Angular 1.6

javascript - JSON.stringify 和 "\u2028\u2029"检查?

javascript - 在 d3.js 中更改家谱中的家庭成员颜色?

javascript - 定义对象仅包含特定类型的元素

angular - 无法绑定(bind)到 'formControl',因为它不是 'input' 的已知属性 - Angular2 Material Autocomplete 问题

升级到 Angular 8.3.5 后,Angular 应用程序不加载应用程序模块/组件

javascript - 在 JavaScript 中使用 for 循环为音频文件分配不同的源

javascript - Vue.js - vue-router 的基本 url 区分大小写吗?

javascript - 找不到名称 'GlobalCompositeOperation'

javascript - Webpack UglifyJS 仍然发出警告消息