【问题标题】:Webpack ProvidePlugin global variable (Cannot find module)Webpack ProvidePlugin 全局变量(找不到模块)
【发布时间】:2018-05-21 22:23:56
【问题描述】:

我对 Webpack 很陌生,但不知道为什么我的 ProvidePlugin 调用没有按预期工作。

我有以下文件:

App.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

我在浏览器中收到以下错误: Cannot find module "app"

当我在控制台中编译 webpack 时: Module not found: Error: Can't resolve 'app'

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

【问题讨论】:

  • 在您的 metronicapp.ts 中,您没有导入应用程序。在 App JS 中,您可以尝试更改 module.export 以导出默认 App。或者在 metronicapp.ts 中将导入更改为“import App from './metronic/global/scripts/app'” 我对此也很陌生,但这就是我会尝试的。

标签: javascript typescript webpack


【解决方案1】:

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');

Layout.js

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

【讨论】:

  • 感谢您的回答!我必须添加以下几行才能使其工作:模块:{规则:[{测试:require.resolve(path.join(ROOT,'angularApp/metronic/global/scripts/metronic-app.js')) ,使用:['exports-loader?App'] }] }
  • 指向路径对我来说是灾难性的失败。
猜你喜欢
  • 1970-01-01
  • 2016-02-10
  • 2015-03-07
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多