我有一个带有 webpack 2.2.1 的 JavaScript ES6 开发环境,我正在开发一个应用程序package-a
。
我还使用此环境来管理package-b
使用npm link
.
环境运作良好。
现在我需要填充package-b 使用fetch
的API 。
所以whatwg-fetch
已经安装好了。
我正在使用的 polyfilling 方式是本次讨论中建议的方式:https ://gist.github.com/Couto/b29676dd1ab8714a818f#gistcomment-1584602
所以我没有调用import 'whatwg-fetch'
我的代码,但我的 webpack 配置中有这个:
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise',
'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch',
'Headers': 'imports-loader?this=>global!exports-loader?global.Headers!whatwg-fetch'
}),
...
这对我来说总是很有效,如果我fetch
从我的主 ( package-a
) 模块中使用也有效,但是当我在依赖项中使用 fetch 时,我得到了这个回溯:
ERROR in ../package-b/~/imports-loader?this=>global!../package-b/~/exports-loader?global.fetch!../ecmwf-prwa-editor/~/whatwg-fetch/fetch.js
Module build failed: Error: "...package-b/node_modules/whatwg-fetch/fetch.js" is not in the SourceMap.
请注意,回溯包含对package-b
node_modules目录的引用(whatwg-fetch
仅作为开发依赖项安装,因为我想保留在“纯”中并且没有自动 polifyll 主机环境)。
删除开发依赖项并将其从node_modules
更改回溯中删除:
ERROR in ../package-b/src/something/something.js
Module not found: Error: Can't resolve 'whatwg-fetch' in '/Users/keul/.../package-b/src/something'
...
如果我放弃这种 polyfilling 的方式,而只是正常地import 'whatwg-fetch'
进行package-a
所有工作。
问题是:这里发生了什么?我正在开发一个存在依赖项的包,为什么在这种情况下通过 webpack 的 polyfill 会失败?有办法解决吗?