避免依赖于monorepo中其他包的源映射中的相对路径

时间:2019-03-17 00:32:47

标签: webpack source-maps aws-amplify lerna monorepo

使用Lerna在monorepo中构建软件包时,应如何配置webpack以确保monorepro内跨软件包依赖项将发出指向已安装位置的源映射(例如./node_modules/@foo/bar/lib/foobar.js),并且不要指向构建软件包的本地文件夹的相对路径(例如../bar/lib/foobar.js)?后一个文件夹在运行时将不存在,这会中断在Chrome或VSCode中的调试。

背景:我使用amplify-js库。它的源映射已损坏,这使调试变得很痛苦。我想建立一个PR来修复该库的源地图,但是我不确定需要哪些更改。

问题在于,为内部monorepo依赖关系生成的源映射包含在构建时指向该位置的相对路径,例如webpack:///../core/lib/index.js。但是从npm安装amplify-js时,只有根软件包直接安装在node_modules的{​​{1}}下。 monorepo中的其他相关软件包,例如node_modules/amplify-js软件包安装在core下,例如@aws-amplify。这使得源映射中的/node_modules/@aws-amplify/core路径在运行时失败,因为webpack:///../core/lib/index.js不存在。

这是源地图中的一个问题摘录( https://unpkg.com/aws-amplify@1.1.22/dist/aws-amplify.js.map)。为了清楚起见,我对其进行了格式化:

../core

应如何配置webpack(或Lerna?或其他东西?)以确保Monorepo内部依赖项的源映射始终指向将在运行时安装这些依赖项的node_modules文件夹?

使用上面的摘录,这就是我希望看到的:

{
  "version":3,
  "sources:[
    "webpack:///webpack/universalModuleDefinition",
    "webpack:///aws-amplify.js",
    "webpack:///webpack/bootstrap 02623d179e36bcc68243",
    "webpack:////root/app/node_modules/aws-sdk/lib/core.js",
    "webpack:///../core/lib/index.js",  // PROBLEM!!!!
    "webpack:////root/app/node_modules/graphql/module/error/index.js",

如果您想重现此问题:

  • git clone https://github.com/aws-amplify/amplify-js.git
  • cd amplify-js
  • 纱线
  • 纱线引导带
  • 建立纱线(警告,这需要几分钟)
  • 打开{ "version":3, "sources:[ "webpack:///webpack/universalModuleDefinition", "webpack:///aws-amplify.js", "webpack:///webpack/bootstrap 02623d179e36bcc68243", "webpack:////root/app/node_modules/aws-sdk/lib/core.js", "webpack:////root/app/node_modules/@aws-amplify/core/lib/index.js", // OK "webpack:////root/app/node_modules/graphql/module/error/index.js",

预期:没有其他软件包的相对路径

实际:相对路径,例如./packages/aws-amplify/dist/aws-amplify.js.map

0 个答案:

没有答案