Избегайте относительных путей в исходных картах, которые зависят от других пакетов в монореполе - PullRequest
0 голосов
/ 17 марта 2019

При сборке пакетов в monorepo с использованием Lerna , как настроить веб-пакет так, чтобы внутри-monorepro, кросс-пакетные зависимости генерировали исходные карты, которые указывают на установленное местоположение (например, ./node_modules/@foo/bar/lib/foobar.js) и не указывает на относительный путь к локальной папке, в которой был собран пакет (например, ../bar/lib/foobar.js)? Последняя папка не будет существовать во время выполнения, что нарушает отладку в Chrome или VSCode.

Справочная информация: я использую библиотеку amplify-js. Его исходные карты нарушены, что делает отладку болезненной. Я хочу создать PR, чтобы исправить исходные карты этой библиотеки, но я не уверен, какие изменения необходимы.

Проблема состоит в том, что исходные карты, созданные для зависимостей внутри монорепо, содержат относительные пути к местоположению во время сборки, например webpack:///../core/lib/index.js. Но при установке amplify-js из npm, только корневой пакет устанавливается непосредственно под node_modules в node_modules/amplify-js. Другие зависимые пакеты в monorepo, например пакет core устанавливается под @aws-amplify, например /node_modules/@aws-amplify/core. Это приводит к сбою пути webpack:///../core/lib/index.js в исходной карте во время выполнения, поскольку ../core не существует.

Вот выдержка из карты источника с проблемой ( https://unpkg.com/aws-amplify@1.1.22/dist/aws-amplify.js.map). Я отформатировал это для ясности:

{
  "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",

Как настроить веб-пакет (или Lerna? Или что-то еще?) Так, чтобы исходные карты для зависимостей intra-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:////root/app/node_modules/@aws-amplify/core/lib/index.js",  // OK
    "webpack:////root/app/node_modules/graphql/module/error/index.js",

Если вы хотите воспроизвести проблему:

  • git clone https://github.com/aws-amplify/amplify-js.git
  • CD Ampify-JS
  • нить
  • бутстрап пряжи
  • сборка пряжи (предупреждение, это займет несколько минут)
  • открыто ./packages/aws-amplify/dist/aws-amplify.js.map

Ожидается: нет относительных путей к другим пакетам

Фактически: относительные пути, такие как "webpack:///../core/lib/index.js"

...