chrome 在不同 "area" 中加载的 Webpack 5 sourcemap - 无法调试
Webpack 5 sourcemap loaded by chrome in different "area" - unable to debug
我有两个 React 组件 - 我希望能够在 chrome 中调试 jsx。
当我加载页面时,我在预期的位置看到了我的组件代码(使用内联源映射)
源映射正在加载(它可以与单独的源映射文件一起使用,也可以内联)
但它会加载到 chrome 中“页面”菜单下的另一个部分。
我在这里看到了我的 jsx 代码。如果我放置一个断点(比如上图中的第 7 行),它将在我的缩小代码中添加相应的断点。但是,如果我“命中”断点,它将命中缩小的代码而不是我原来的 jsx(我认为 chrome 中的 sourcemaps 是可能的?)
我以前使用过 webpack 的源地图 - 但我不记得遇到过这个问题并且没有任何运气搜索 Whosebug/google。
这是我的Webpack.Config
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const SourceMapDevToolPlugin = require('webpack/lib/SourceMapDevToolPlugin');
const webpackEntries = {
SavingsGoalAccount: './src/SavingsGoalAccount.jsx',
SavingsGoalsList: './src/SavingsGoalsList.jsx',
};
module.exports = {
mode: 'production',
entry: webpackEntries,
//devtool: "inline-source-map",
devtool: 'source-map',
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].[contenthash].js',
library: {
type: 'umd',
name: '[name]',
},
globalObject: 'this',
},
resolve: {
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.(css)$/,
use: [MiniCssExtractPlugin.loader, 'css-loader'],
},
{
test: /\.s[ac]ss$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
},
],
},
externals: {
react: {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react',
},
},
optimization: {
moduleIds: 'deterministic',
splitChunks: {
cacheGroups: {
vendor: {
test: /[\/]node_modules[\/]/,
name: 'vendors',
chunks: 'all',
},
},
},
},
plugins: [
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: [path.join(__dirname, 'dist/**/*')],
}),
new MiniCssExtractPlugin(),
],
};
它按预期在我的 dist 文件夹中输出:
因为您将 devTool
值用作 source-map
。它将加载您编写的原始代码作为源映射。这也发生在我身上,我根据需要将 devTool 值更改为不同的值。
根据 webpack 文档 - https://webpack.js.org/configuration/devtool/#devtool
如果质量是原始的,那么它将加载整个代码:
quality: original- You will see the original code that you wrote, assuming all loaders support SourceMapping.
如果你不需要它。请根据您的需要选择一个选项。
我有两个 React 组件 - 我希望能够在 chrome 中调试 jsx。
当我加载页面时,我在预期的位置看到了我的组件代码(使用内联源映射)
源映射正在加载(它可以与单独的源映射文件一起使用,也可以内联)
但它会加载到 chrome 中“页面”菜单下的另一个部分。
我在这里看到了我的 jsx 代码。如果我放置一个断点(比如上图中的第 7 行),它将在我的缩小代码中添加相应的断点。但是,如果我“命中”断点,它将命中缩小的代码而不是我原来的 jsx(我认为 chrome 中的 sourcemaps 是可能的?)
我以前使用过 webpack 的源地图 - 但我不记得遇到过这个问题并且没有任何运气搜索 Whosebug/google。
这是我的Webpack.Config
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const SourceMapDevToolPlugin = require('webpack/lib/SourceMapDevToolPlugin');
const webpackEntries = {
SavingsGoalAccount: './src/SavingsGoalAccount.jsx',
SavingsGoalsList: './src/SavingsGoalsList.jsx',
};
module.exports = {
mode: 'production',
entry: webpackEntries,
//devtool: "inline-source-map",
devtool: 'source-map',
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].[contenthash].js',
library: {
type: 'umd',
name: '[name]',
},
globalObject: 'this',
},
resolve: {
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.(css)$/,
use: [MiniCssExtractPlugin.loader, 'css-loader'],
},
{
test: /\.s[ac]ss$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
},
],
},
externals: {
react: {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react',
},
},
optimization: {
moduleIds: 'deterministic',
splitChunks: {
cacheGroups: {
vendor: {
test: /[\/]node_modules[\/]/,
name: 'vendors',
chunks: 'all',
},
},
},
},
plugins: [
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: [path.join(__dirname, 'dist/**/*')],
}),
new MiniCssExtractPlugin(),
],
};
它按预期在我的 dist 文件夹中输出:
因为您将 devTool
值用作 source-map
。它将加载您编写的原始代码作为源映射。这也发生在我身上,我根据需要将 devTool 值更改为不同的值。
根据 webpack 文档 - https://webpack.js.org/configuration/devtool/#devtool
如果质量是原始的,那么它将加载整个代码:
quality: original- You will see the original code that you wrote, assuming all loaders support SourceMapping.
如果你不需要它。请根据您的需要选择一个选项。