evanw / evanw/node-source-map-support
Problem with sourceRoot when dealing with nested folder structure
- 主要言語
- JavaScript
- スター
- 2.2k
- フォーク
- 223
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Say that I have a project like this:
```
%project_root%
├─coffee
│ └─sub_folder
│ │ └─bar.coffee
│ └─foo.coffee
├─js
│ └─sub_folder
│ │ └─bar.js
│ └─foo.js
├─map
│ └─sub_folder
│ │ └─bar.js.map
│ └─foo.js.map
```
If an error was thrown in `bar.coffee`, the source path would be wrong. There're several cases (tested on Windows, project folder is on drive `X:`):
| `sourceRoot` Value | Source path in error messages for `foo.coffee` | Source path in error messages for `sub_folder/bar.coffee` |
| --- | --- | --- |
| Not set | `%project_root%/map/foo.coffee` | `%project_root%/map/sub_folder/bar.coffee` |
| `/src` | `x:/src/foo.coffee` | `x:/src/sub_folder/bar.coffee` |
| `./src` | `%project_root%/map/src/foo.coffee` | `%project_root%/map/src/sub_folder/bar.coffee` |
| `../src` | `%project_root%/src/foo.coffee` | `%project_root%/map/src/sub_folder/bar.coffee` |
| `__dirname + /src` | %project_root%/src/foo.coffee`|`%project_root%/src/sub_folder/bar.coffee` | |
As you can see, only hard-code the absolute path of `%project_root%` will give us the correct behavior. But it is not very useful since those paths may not be valid on another system.
I think a possible solution would be to resolve `sourceRoot` path relative to map root instead of [each map file's location](https://github.com/evanw/node-source-map-support/pull/4/files#diff-f332e9a051ea7f7b602a3d633c506d30R30) (introduced by #4), when the `sourceRoot` is a relative path.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
まず、pull request #4 で導入された source-map のパス解決を調査します。特に、相対 sourceRoot が各 map ファイルの場所を基準にどのように解決されるかを確認してください。Windows でネストしたフォルダーの例を再現し、相対 sourceRoot 値が map のルートを基準に解決される一方で、foo.coffee と sub_folder/bar.coffee の両方について正しいパスが維持されることを検証してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- javascript, node.js
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100