#javascript #webpack #async-await #babeljs #core-js
Вопрос:
В настоящее время я пытаюсь отладить свой упакованный пакет Webpack. Для улучшения совместимости я использую плагин babel и corejs, чтобы сделать возможным использование функций async/await. Я также использую 'eval-source-map'
исходную карту для отладки своего кода в DevTools. Проблема возникает в Firefox и Chrome DevTools.
Я хочу установить точку останова в асинхронной функции и хочу перешагнуть через ее строки. Я устанавливаю точку останова вот так:
До сих пор все работало нормально. Моя точка останова распознана, и я могу приостановить выполнение кода. Теперь я нажимаю «Перейти», чтобы выполнить DOM.getInput()
функцию и передать ее результат в переменную. Эта функция является нормальной синхронной функцией. Это происходит:
После нажатия кнопки «Перешагнуть» точка останова переходит в строку объявления функции, при продолжении многократного нажатия кнопки «Перешагнуть» точка останова остается в течение первых нескольких шагов в строке объявления функции и внезапно заканчивается переходом через файлы node_module. Стек вызовов указывает, что эти файлы в некоторой степени вызываются из _asyncToGenerator
. Я предполагаю, что это как-то связано с преобразованием асинхронных функций с помощью Babel.
Кроме того, при возникновении ошибок в асинхронных функциях часто путается стек вызовов, см. Следующее сообщение об ошибке:
Это происходит, хотя я правильно определил исходную карту.
Из-за этого я начал гуглить, если у кого-то была такая же проблема, и нашел эту проблему на GitHub. В принципе, у ОП по этому вопросу была та же проблема, что и у меня. Он написал следующее: «Фактическое поведение — точки останова переходят в строку объявления функции». Кто-то прокомментировал, что использование следующей конфигурации для Babel решит проблему:
{
"env": {
"development": {
"sourceMaps": true,
"retainLines": true
}
},
"presets": [
"es2015"
]
}
I believe, only these settings are necessary:
"env": {
"development": {
"sourceMaps": true,
"retainLines": true
}
However, I want to configure my Babel settings in the Webpack configuration file, not in a .babelrc
. I probably should add them somewhere in the options object of the Babel loader, but how do I include them there, without removing my old settings? My current webpack.config.js
looks like this:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
devtool: 'eval-source-map',
mode: 'development',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
devServer: {
client: {
overlay: false,
},
static: {
directory: path.join(__dirname, 'dist'),
},
port: 9000,
hot: 'only',
},
module: {
rules: [
{
test: /.css$/i,
use: ['style-loader', 'css-loader'],
},
{
test: /.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
{
test: /.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
{
test: /.(webm)$/i,
type: 'asset/resource',
},
{
test: /.html$/i,
loader: 'html-loader',
},
{
test: /.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: [['@babel/preset-env', {useBuiltIns: 'usage', corejs: 3}]]
}
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
})
],
};
Однако, если кто-то знает лучшую попытку исправить это, пожалуйста, просто скажите мне, я с удовольствием попробую!