我正在尝试使用VScode从webpack调试用Angular 2构建编写的应用程序。我可以使用VSCode中的chrome扩展调试器来附加我的应用程序。而且确实达到了已编译的js文件的断点。但是它找不到源映射文件。
似乎webpack会有一个webpack://来托管* .js文件指向的文件,如图所示:
而且我可以在webpack文件夹内的ts文件中设置断点。但是vscode找不到ts文件。所以我将webpack的配置更改为
output: { path:root('__build'); devtoolModuleFilenameTemplate: function(info){ return "file:///"+info.absoluteResourcePath; } },
然后,所有文件似乎都映射到原始ts文件的绝对路径。在chrome开发人员工具中,它看起来像这样:
但是chrome和vscode都表示此file://中的文件与原始ts文件不同。所以我想知道在webpack的配置中是否有一种方法可以使* .js文件源映射变为原始ts文件。这是我的所有配置:
打字稿配置:
{ "compilerOptions": { "outDir": "dist", "target": "ES5", "module": "commonjs", "sourceMap": true } }
webpack配置:
{ entry: "./src/app/bootstrap", output: { path: root('__build__'), filename: env({ 'development': '[name].js', 'all': '[name].[hash].min.js' }), devtoolModuleFilenameTemplate: function(info){ return "file:///"+info.absoluteResourcePath; } }, devtool:'source-map', devServer: { contentBase: "public/" } }
另一件事是,如果在chrome开发人员工具中,如果我将原始文件添加到工作区中并将文件从file://映射到此文件夹,则实际上可以在这些文件中设置断点。所以我想知道是否有一种方法可以映射到vscode中的本地资源。
我改变了这个:
output: { // ...snip... devtoolModuleFilenameTemplate: function(info){ return "file:///"+info.absoluteResourcePath; } },
对此:
output: { // ...snip... devtoolModuleFilenameTemplate: function(info){ return "file:///"+encodeURI(info.absoluteResourcePath); } },
现在它可以正确地对空格进行编码,并且源映射文件可以按预期工作。