æ¤é项æ§å¶æ¯å¦çæï¼ä»¥åå¦ä½çæ source mapã
ä½¿ç¨ SourceMapDevToolPlugin è¿è¡æ´ç»ç²åº¦çé
ç½®ãæ¥ç source-map-loader æ¥å¤çå·²æç source mapã
string = 'eval' false
éæ©ä¸ç§ source map 飿 ¼æ¥å¢å¼ºè°è¯è¿ç¨ãä¸åçå¼ä¼ææ¾å½±åå°æå»º(build)åéæ°æå»º(rebuild)çé度ã
| devtool | performance | production | quality | comment |
|---|---|---|---|---|
| (none) | build: fastest rebuild: fastest | yes | bundle | Recommended choice for production builds with maximum performance. |
eval | build: fast rebuild: fastest | no | generated | Recommended choice for development builds with maximum performance. |
eval-cheap-source-map | build: ok rebuild: fast | no | transformed | Tradeoff choice for development builds. |
eval-cheap-module-source-map | build: slow rebuild: fast | no | original lines | Tradeoff choice for development builds. |
eval-source-map | build: slowest rebuild: ok | no | original | Recommended choice for development builds with high quality SourceMaps. |
cheap-source-map | build: ok rebuild: slow | no | transformed | |
cheap-module-source-map | build: slow rebuild: slow | no | original lines | |
source-map | build: slowest rebuild: slowest | yes | original | Recommended choice for production builds with high quality SourceMaps. |
inline-cheap-source-map | build: ok rebuild: slow | no | transformed | |
inline-cheap-module-source-map | build: slow rebuild: slow | no | original lines | |
inline-source-map | build: slowest rebuild: slowest | no | original | Possible choice when publishing a single file |
eval-nosources-cheap-source-map | build: ok rebuild: fast | no | transformed | source code not included |
eval-nosources-cheap-module-source-map | build: slow rebuild: fast | no | original lines | source code not included |
eval-nosources-source-map | build: slowest rebuild: ok | no | original | source code not included |
inline-nosources-cheap-source-map | build: ok rebuild: slow | no | transformed | source code not included |
inline-nosources-cheap-module-source-map | build: slow rebuild: slow | no | original lines | source code not included |
inline-nosources-source-map | build: slowest rebuild: slowest | no | original | source code not included |
nosources-cheap-source-map | build: ok rebuild: slow | no | transformed | source code not included |
nosources-cheap-module-source-map | build: slow rebuild: slow | no | original lines | source code not included |
nosources-source-map | build: slowest rebuild: slowest | yes | original | source code not included |
hidden-nosources-cheap-source-map | build: ok rebuild: slow | no | transformed | no reference, source code not included |
hidden-nosources-cheap-module-source-map | build: slow rebuild: slow | no | original lines | no reference, source code not included |
hidden-nosources-source-map | build: slowest rebuild: slowest | yes | original | no reference, source code not included |
hidden-cheap-source-map | build: ok rebuild: slow | no | transformed | no reference |
hidden-cheap-module-source-map | build: slow rebuild: slow | no | original lines | no reference |
hidden-source-map | build: slowest rebuild: slowest | yes | original | no reference. Possible choice when using SourceMap only for error reporting purposes. |
| shortcut | explanation |
|---|---|
| performance: build | How is the performance of the initial build affected by the devtool setting? |
| performance: rebuild | How is the performance of the incremental build affected by the devtool setting? Slow devtools might reduce development feedback loop in watch mode. The scale is different compared to the build performance, as one would expect rebuilds to be faster than builds. |
| production | Does it make sense to use this devtool for production builds? It's usually no when the devtool has a negative effect on user experience. |
| quality: bundled | You will see all generated code of a chunk in a single blob of code. This is the raw output file without any devtooling support |
| quality: generated | You will see the generated code, but each module is shown as separate code file in browser devtools. |
| quality: transformed | You will see generated code after the preprocessing by loaders but before additional webpack transformations. Only source lines will be mapped and column information will be discarded resp. not generated. This prevents setting breakpoints in the middle of lines which doesn't work together with minimizer. |
| quality: original lines | You will see the original code that you wrote, assuming all loaders support SourceMapping. Only source lines will be mapped and column information will be discarded resp. not generated. This prevents setting breakpoints in the middle of lines which doesn't work together with minimizer. |
| quality: original | You will see the original code that you wrote, assuming all loaders support SourceMapping. |
eval-* addition | generate SourceMap per module and attach it via eval. Recommended for development, because of improved rebuild performance. Note that there is a windows defender issue, which causes huge slowdown due to virus scanning. |
inline-* addition | inline the SourceMap to the original file instead of creating a separate file. |
hidden-* addition | no reference to the SourceMap added. When SourceMap is not deployed, but should still be generated, e. g. for error reporting purposes. |
nosources-* addition | source code is not included in SourceMap. This can be useful when the original files should be referenced (further config options needed). |
å ¶ä¸ä¸äºå¼éç¨äºå¼åç¯å¢ï¼ä¸äºéç¨äºç产ç¯å¢ã对äºå¼åç¯å¢ï¼é叏叿æ´å¿«éç source mapï¼éè¦æ·»å å° bundle ä¸ä»¥å¢å ä½ç§¯ä¸ºä»£ä»·ï¼ä½æ¯å¯¹äºç产ç¯å¢ï¼å叿æ´ç²¾åç source mapï¼éè¦ä» bundle ä¸å离并ç¬ç«åå¨ã
æå
åç代ç - å°ææçæç代ç è§ä¸ºä¸å¤§å代ç ãä½ çä¸å°ç¸äºåç¦»çæ¨¡åã
çæåç代ç - æ¯ä¸ªæ¨¡åç¸äºå离ï¼å¹¶ç¨æ¨¡ååç§°è¿è¡æ³¨éãå¯ä»¥çå° webpack çæç代ç ã示ä¾ï¼ä½ ä¼çå°ç±»ä¼¼ var module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42); module__WEBPACK_IMPORTED_MODULE_1__.a();ï¼è䏿¯ import {test} from "module"; test();ã
转æ¢è¿ç代ç - æ¯ä¸ªæ¨¡åç¸äºå离ï¼å¹¶ç¨æ¨¡ååç§°è¿è¡æ³¨éãå¯ä»¥çå° webpack 转æ¢åãloader 转è¯åç代ç ã示ä¾ï¼ä½ ä¼çå°ç±»ä¼¼ import {test} from "module"; var A = function(_test) { ... }(test);ï¼è䏿¯ import {test} from "module"; class A extends test {}ã
åå§æºä»£ç - æ¯ä¸ªæ¨¡åç¸äºå离ï¼å¹¶ç¨æ¨¡ååç§°è¿è¡æ³¨éãä½ ä¼çå°è½¬è¯ä¹åç代ç ï¼æ£å¦ç¼å宿¶ãè¿åå³äº loader æ¯æã
æ æºä»£ç å
容 - source map ä¸ä¸å
嫿ºä»£ç å
å®¹ãæµè§å¨é常ä¼å°è¯ä» web æå¡å¨ææä»¶ç³»ç»å è½½æºä»£ç ãä½ å¿
é¡»ç¡®ä¿æ£ç¡®è®¾ç½® output.devtoolModuleFilenameTemplateï¼ä»¥å¹é
æºä»£ç ç urlã
ï¼ä»
éè¡ï¼ - source map 被ç®å为æ¯è¡ä¸ä¸ªæ å°ãè¿é常æå³çæ¯ä¸ªè¯å¥åªæä¸ä¸ªæ å°ï¼åè®¾ä½ ä½¿ç¨è¿ç§æ¹å¼ï¼ãè¿ä¼å¦¨ç¢ä½ å¨è¯å¥çº§å«ä¸è°è¯æ§è¡ï¼ä¹ä¼å¦¨ç¢ä½ 卿¯è¡çä¸äºåä¸è®¾ç½®æç¹ãä¸å缩åç代ç ç»ååï¼æ å°å
³ç³»æ¯ä¸å¯è½å®ç°çï¼å 为å缩工å
·é常åªä¼è¾åºä¸è¡ã
以ä¸é项é常éåå¼åç¯å¢ï¼
eval - æ¯ä¸ªæ¨¡åé½ä½¿ç¨ eval() æ§è¡ï¼å¹¶ä¸é½æ //# sourceURLãæ¤é项ä¼éå¸¸å¿«å°æå»ºã主è¦ç¼ºç¹æ¯ï¼ç±äºä¼æ å°å°è½¬æ¢åç代ç ï¼è䏿¯æ å°å°åå§ä»£ç ï¼æ²¡æä» loader ä¸è·å source mapï¼ï¼æä»¥ä¸è½æ£ç¡®çæ¾ç¤ºè¡æ°ã
eval-source-map - æ¯ä¸ªæ¨¡åä½¿ç¨ eval() æ§è¡ï¼å¹¶ä¸ source map 转æ¢ä¸º DataUrl åæ·»å å° eval() ä¸ãåå§å source map æ¶æ¯è¾æ
¢ï¼ä½æ¯ä¼å¨éæ°æå»ºæ¶æä¾æ¯è¾å¿«çé度ï¼å¹¶ä¸çæå®é
çæä»¶ãè¡æ°è½å¤æ£ç¡®æ å°ï¼å ä¸ºä¼æ å°å°åå§ä»£ç ä¸ãå®ä¼çæç¨äºå¼åç¯å¢çæä½³åè´¨ç source mapã
eval-cheap-source-map - 类似 eval-source-mapï¼æ¯ä¸ªæ¨¡åä½¿ç¨ eval() æ§è¡ãè¿æ¯ "cheap(ä½å¼é)" ç source mapï¼å ä¸ºå®æ²¡æçæåæ å°(column mapping)ï¼åªæ¯æ å°è¡æ°ãå®ä¼å¿½ç¥æºèª loader ç source mapï¼å¹¶ä¸ä»
æ¾ç¤ºè½¬è¯åç代ç ï¼å°±å eval devtoolã
eval-cheap-module-source-map - 类似 eval-cheap-source-mapï¼å¹¶ä¸ï¼å¨è¿ç§æ
åµä¸ï¼æºèª loader ç source map ä¼å¾å°æ´å¥½çå¤çç»æãç¶èï¼loader source map ä¼è¢«ç®å为æ¯è¡ä¸ä¸ªæ å°(mapping)ã
以ä¸é项对äºå¼åç¯å¢åç产ç¯å¢å¹¶ä¸çæ³ãä»ä»¬æ¯ä¸äºç¹å®åºæ¯ä¸éè¦çï¼ä¾å¦ï¼é对ä¸äºç¬¬ä¸æ¹å·¥å ·ã
inline-source-map - source map 转æ¢ä¸º DataUrl åæ·»å å° bundle ä¸ã
cheap-source-map - 没æåæ å°(column mapping)ç source mapï¼å¿½ç¥ loader source mapã
inline-cheap-source-map - 类似 cheap-source-mapï¼ä½æ¯ source map 转æ¢ä¸º DataUrl åæ·»å å° bundle ä¸ã
cheap-module-source-map - 没æåæ å°(column mapping)ç source mapï¼å° loader source map ç®å为æ¯è¡ä¸ä¸ªæ å°(mapping)ã
inline-cheap-module-source-map - 类似 cheap-module-source-mapï¼ä½æ¯ source mapp 转æ¢ä¸º DataUrl æ·»å å° bundle ä¸ã
è¿äºé项é常ç¨äºç产ç¯å¢ä¸ï¼
(none)ï¼çç¥ devtool éé¡¹ï¼ - ä¸çæ source mapãè¿æ¯ä¸ä¸ªä¸éçéæ©ã
source-map - æ´ä¸ª source map ä½ä¸ºä¸ä¸ªåç¬çæä»¶çæãå®ä¸º bundle æ·»å äºä¸ä¸ªå¼ç¨æ³¨éï¼ä»¥ä¾¿å¼åå·¥å
·ç¥éå¨åªéå¯ä»¥æ¾å°å®ã
hidden-source-map - ä¸ source-map ç¸åï¼ä½ä¸ä¼ä¸º bundle æ·»å å¼ç¨æ³¨éãå¦æä½ åªæ³ source map æ å°é£äºæºèªé误æ¥åçéè¯¯å æ è·è¸ªä¿¡æ¯ï¼ä½ä¸æ³ä¸ºæµè§å¨å¼åå·¥å
·æ´é²ä½ ç source mapï¼è¿ä¸ªé项ä¼å¾æç¨ã
nosources-source-map - å建ç source map ä¸å
å« sourcesContent(æºä»£ç å
容)ãå®å¯ä»¥ç¨æ¥æ å°å®¢æ·ç«¯ä¸çå æ è·è¸ªï¼èæ é¡»æ´é²ææçæºä»£ç ãä½ å¯ä»¥å° source map æä»¶é¨ç½²å° web æå¡å¨ã