TypeScript + Babel + Jest не использует moduleNameMapper для меньшего количества файлов

У меня есть конфигурация 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',
  },
};

Я понятия не имею, что происходит и как я могу отладить это.


person dx_over_dt    schedule 20.07.2020    source источник


Ответы (1)


Оказывается, это была проблема с нашим babel.config.js. Мы добавляли плагин babel-plugin-css-modules-transform, который явно заменил запись moduleNameMapper.

person dx_over_dt    schedule 21.07.2020