У меня есть конфигурация jest, настроенная для сопоставления любого импорта .less и .css с модулем identity-obj-proxy
, как это предписано практически в каждой существующей документации/руководстве.
module.exports = {
// ...
moduleNameMapper: {
'\\.(css|less)$': 'identity-obj-proxy',
},
};
Однако я обнаружил, что когда файл .less включает некоторые формы недопустимого css (например, однострочные комментарии, вызывающие примеси и т. д.), импортируемый объект оказывается пустым. Это привело меня к открытию, что сопоставление даже не запускается, и какой-то другой механизм (который я не понял, так как я не настраивал этот проект) генерировал имена классов из таблиц стилей, а не просто используя прокси.
import styles from './my-style-sheet.less'; // styles = {}
import * as styles from './my-style-sheet.less'); // styles = { default: {} }
import styles from './not-a-real-file.less'); // styles = {}
const styles = require('./my-style-sheet.less'); // styles = {}
Что действительно странно для меня, так это то, что когда я отлаживаю и оцениваю выражение require('./my-style-sheet.less')
, оно действительно импортирует прокси-модуль. На самом деле, я могу потребовать что угодно, оканчивающееся на .less
, и он будет импортировать прокси, независимо от того, существует ли файл — чего я и ожидал.
Другие шаблоны в moduleNameMapper
работают правильно, например, некоторые псевдонимы путей.
module.exports = {
// ...
moduleNameMapper: {
'^common': '<rootDir>/src/components/common',
},
};
Я понятия не имею, что происходит и как я могу отладить это.