2

我有一个带有 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 会失败?有办法解决吗?

4

0 回答 0