如何将 webpack sourcemap 制作成原始文件
how to make webpack sourcemap to original files
我正在尝试调试使用 Angular 2 从 webpack 构建的 VScode 编写的应用程序。我可以在 VSCode 中使用 chrome 扩展的调试器来附加我的应用程序。而且它确实打到了编译后的js文件的断点。但是它找不到 sourcemap 文件。
似乎 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.
中的本地资源
感谢 Rob Lourens,此问题是由文件路径中的空格和其他特殊字符引起的,这些字符可能会破坏源映射。
我改变了这个:
output: {
// ...snip...
devtoolModuleFilenameTemplate: function(info){
return "file:///"+info.absoluteResourcePath;
}
},
对此:
output: {
// ...snip...
devtoolModuleFilenameTemplate: function(info){
return "file:///"+encodeURI(info.absoluteResourcePath);
}
},
现在它正确地编码了空格,并且 sourcemap 文件按预期工作。
我正在尝试调试使用 Angular 2 从 webpack 构建的 VScode 编写的应用程序。我可以在 VSCode 中使用 chrome 扩展的调试器来附加我的应用程序。而且它确实打到了编译后的js文件的断点。但是它找不到 sourcemap 文件。
似乎 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.
中的本地资源感谢 Rob Lourens,此问题是由文件路径中的空格和其他特殊字符引起的,这些字符可能会破坏源映射。
我改变了这个:
output: {
// ...snip...
devtoolModuleFilenameTemplate: function(info){
return "file:///"+info.absoluteResourcePath;
}
},
对此:
output: {
// ...snip...
devtoolModuleFilenameTemplate: function(info){
return "file:///"+encodeURI(info.absoluteResourcePath);
}
},
现在它正确地编码了空格,并且 sourcemap 文件按预期工作。