webpack 5 удаляет опциональные цепочки
Foo.js
const Foo = {
bar: {
test: 15,
},
};
export default Foo;
index.js
import Foo from "./Foo";
const bar = {
test2() {
console.log(Foo?.bar?.test);
console.log(Foo?.qwerty?.test);
},
};
bar?.test1?.();
bar?.test2?.();
webpack.config.js
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
context: path.resolve(__dirname, 'src'),
mode: 'development',
entry: {
'index': './index.js',
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist'),
},
resolve: {
extensions: ['.js'],
},
plugins: [
new CleanWebpackPlugin(),
],
};
Собираю, запускаю, скрипт валится с ошибкой
Uncaught TypeError: Cannot read properties of undefined (reading 'test')
Потому что внутри bar все "?." заменены на "."
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _Foo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Foo */ "./Foo.js");
const bar = {
test2() {
console.log(_Foo__WEBPACK_IMPORTED_MODULE_0__["default"].bar.test);
console.log(_Foo__WEBPACK_IMPORTED_MODULE_0__["default"].qwerty.test);
},
};
bar?.test1?.();
bar?.test2?.();
Вроде бы это происходит только при непосредственном обращении к свойствам импортируемых объектов. Как это исправить?
Версии:
"clean-webpack-plugin": "^4.0.0",
"webpack": "^5.60.0",
"webpack-cli": "^4.9.1"