回答編集履歴

5

launch.jsonの追記

2025/03/13 19:03

投稿

kassyi
kassyi

スコア10

test CHANGED
@@ -13,8 +13,9 @@
13
13
  * その結果VSCodeがソースコードと対応付けられず、ブレークポイントがヒットしなかった。
14
14
 
15
15
  ## 解決策
16
- ```launch.json
16
+ ```launch.jsonの抜粋
17
17
  {
18
+ "webRoot": "${workspaceFolder}/",
18
19
  sourceMapPathOverrides": {
19
20
  "webpack:///*": "${webRoot}/*"`
20
21
  }

4

geminiを使ってmdにわかりやすくまとめた

2025/03/13 19:01

投稿

kassyi
kassyi

スコア10

test CHANGED
@@ -1,70 +1,38 @@
1
- 現在はwebpack://となっていますが、以前はpakage.jsonにnameを指定していたため、パッケージ名/になっていました。そのためwebpack://が解決できなかったようです。
1
+ # 原因
2
2
 
3
- ![Chromeの開発者ツールのSourcesタブ](https://ddjkaamml8q8x.cloudfront.net/questions/2025-02-28/c9999ab1-fb30-474f-b298-7a0f2001e1ac.png)
3
+ Webpackは、ソースマップ内に記述するソースコードのパスを、設定によって様々な形式で生成します。具体的には以下の2つのパターンがあります。
4
4
 
5
- すなわち、pakage.jsonをこのように修正することで、無事ブレークポイントが読み込まれるようになり、解決しました。
5
+ * **パッケージ名を含む形式:** `webpack://<package-name>/path/to/file.ts`
6
+ * **パッケージ名を含まない形式:** `webpack:///path/to/file.ts` または `webpack://path/to/file.ts`
6
7
 
7
- **before pakage.json:**
8
- ```json
8
+ **問題点:**
9
+
10
+ `package.json` でパッケージ名を指定した場合であっても、Webpackがソースマップのパスに必ずしもパッケージ名を含めるとは限りません。一方で、`launch.json` の `sourceMapPathOverrides` でパッケージ名に依存した形式 (`"webpack://<package-name>/*": "${webRoot}/*"`) を指定してしまったため、以下の状況が発生しました。
11
+
12
+ * 実際にはWebpackがパッケージ名を含まない形式でパスを生成していた。
13
+ * その結果VSCodeがソースコードと対応付けられず、ブレークポイントがヒットしなかった。
14
+
15
+ ## 解決策
16
+ ```launch.json
9
17
  {
18
+ sourceMapPathOverrides": {
10
- "name": "sample-package-name"
19
+ "webpack:///*": "${webRoot}/*"`
11
- "private": true,
20
+ }
12
- "version": "1.0.0",
13
- "description": "",
14
- "main": "index.html",
15
- "type": "module"
16
21
  }
17
22
  ```
18
23
 
19
- **before launch.json**
20
- ``` json
21
- {
22
- "version": "0.2.0",
23
- "configurations": [
24
- {
25
- "type": "chrome",
26
- "request": "launch",
27
- "name": "Launch development server",
28
- "url": "http://localhost:9223",
29
- "webRoot": "${workspaceFolder}/src",
30
- "preLaunchTask": "dev",
31
- "resolveSourceMapLocations": ["!**/node_modules/**"],
32
- "sourceMapPathOverrides": {
33
- "webpack://sample-package-name/*": "${webRoot}/*"
24
+ `"webpack:///*": "${webRoot}/*"` という設定は、Webpackが生成するソースマップのルートアドレスがパッケージ名を含むかどうかに関わらず、`webpack://` から始まる全てのパスを `webRoot` にマッピングする汎用的な設定です。
34
- }
35
- }
36
- ]
37
- }
38
- ```
39
25
 
40
- **after pakage.json:**
26
+ **この設定により:**
41
- ```json
42
- {
43
- "private": true,
44
- "version": "1.0.0",
45
- "description": "",
46
- "main": "index.html",
47
- "type": "module"
48
- }
49
- ```
50
27
 
51
- **after launch.json**
52
- ``` json
53
- {
54
- "version": "0.2.0",
55
- "configurations": [
56
- {
57
- "type": "chrome",
58
- "request": "launch",
59
- "name": "Launch development server",
60
- "url": "http://localhost:9223",
61
- "webRoot": "${workspaceFolder}/src",
28
+ * Webpackがどのような形式でソースマップのパスを生成していても、VSCodeが正しくソースコードを見つけられるようになります。
62
- "preLaunchTask": "dev",
29
+ * その結果ブレークポイントが正常に機能するようになりました。
30
+
31
+ # まとめ
32
+
63
- "resolveSourceMapLocations": ["!**/node_modules/**"],
33
+ 今回の問題は、`launch.json` `sourceMapPathOverrides` で指定したパスの形式と、実際にWebpackが生成したソースマップ内のパスの形式が一致していなかったことが原因です。
34
+
64
- "sourceMapPathOverrides": {
35
+ **重要なポイント:**
36
+
65
- "webpack:///*": "${webRoot}/*"
37
+ パッケージ名を指定したからといって、Webpackが必ずそのパッケージ名をソースマップのパスに含めるとは限りません。そのため、より汎用的な `"webpack:///*": "${webRoot}/*"` の設定が有効でした。
66
- }
38
+
67
- }
68
- ]
69
- }
70
- ```

3

beforとafterの下記間違え修正

2025/02/28 14:59

投稿

kassyi
kassyi

スコア10

test CHANGED
@@ -48,7 +48,7 @@
48
48
  }
49
49
  ```
50
50
 
51
- **before launch.json**
51
+ **after launch.json**
52
52
  ``` json
53
53
  {
54
54
  "version": "0.2.0",

2

完全に解決したため解決方法を刷新

2025/02/28 14:58

投稿

kassyi
kassyi

スコア10

test CHANGED
@@ -1,23 +1,70 @@
1
+ 現在はwebpack://となっていますが、以前はpakage.jsonにnameを指定していたため、パッケージ名/になっていました。そのためwebpack://が解決できなかったようです。
2
+
3
+ ![Chromeの開発者ツールのSourcesタブ](https://ddjkaamml8q8x.cloudfront.net/questions/2025-02-28/c9999ab1-fb30-474f-b298-7a0f2001e1ac.png)
4
+
1
- tsconfigのように変えたらデバッグきるようになりました。また実際にブレークポイントを挟んだそのコードで走らせことが大事なようです
5
+ すなわち、pakage.jsonをのように修正することで、無事ブレークポイントが読み込るようになり、解決しました
6
+
2
- **before:**
7
+ **before pakage.json:**
3
- ```tsconfig.json
8
+ ```json
4
9
  {
10
+ "name": "sample-package-name"
5
- "compilerOptions": {
11
+ "private": true,
6
- "target": "ES2015",
12
+ "version": "1.0.0",
7
- "sourceMap": true
13
+ "description": "",
8
- //other option
9
- }
10
- }
11
- ```
12
- **after:**
13
- ```tsconfig.json
14
- {
15
- "compilerOptions": {
14
+ "main": "index.html",
16
- "target": "ES2019",
15
+ "type": "module"
17
- "sourceMap": true
18
- //other option
19
- }
20
16
  }
21
17
  ```
22
18
 
19
+ **before launch.json**
20
+ ``` json
21
+ {
22
+ "version": "0.2.0",
23
+ "configurations": [
24
+ {
25
+ "type": "chrome",
26
+ "request": "launch",
27
+ "name": "Launch development server",
23
- ただターゲットをES2015→ES2019にしただけですが‥他のパッケージとの相性がES2015と悪かったのかもしれません。
28
+ "url": "http://localhost:9223",
29
+ "webRoot": "${workspaceFolder}/src",
30
+ "preLaunchTask": "dev",
31
+ "resolveSourceMapLocations": ["!**/node_modules/**"],
32
+ "sourceMapPathOverrides": {
33
+ "webpack://sample-package-name/*": "${webRoot}/*"
34
+ }
35
+ }
36
+ ]
37
+ }
38
+ ```
39
+
40
+ **after pakage.json:**
41
+ ```json
42
+ {
43
+ "private": true,
44
+ "version": "1.0.0",
45
+ "description": "",
46
+ "main": "index.html",
47
+ "type": "module"
48
+ }
49
+ ```
50
+
51
+ **before launch.json**
52
+ ``` json
53
+ {
54
+ "version": "0.2.0",
55
+ "configurations": [
56
+ {
57
+ "type": "chrome",
58
+ "request": "launch",
59
+ "name": "Launch development server",
60
+ "url": "http://localhost:9223",
61
+ "webRoot": "${workspaceFolder}/src",
62
+ "preLaunchTask": "dev",
63
+ "resolveSourceMapLocations": ["!**/node_modules/**"],
64
+ "sourceMapPathOverrides": {
65
+ "webpack:///*": "${webRoot}/*"
66
+ }
67
+ }
68
+ ]
69
+ }
70
+ ```

1

ブレークポイントについて追加

2025/01/30 18:18

投稿

kassyi
kassyi

スコア10

test CHANGED
@@ -1,4 +1,4 @@
1
- tsconfigを次のように変えたらデバッグできるようになりました。
1
+ tsconfigを次のように変えたらデバッグできるようになりました。また、実際にブレークポイントを挟んだそのコードまで走らせることが大事なようです。
2
2
  **before:**
3
3
  ```tsconfig.json
4
4
  {