使用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",
如果您想重现此问题:
{
"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