Я пытаюсь понять, почему webpack требует этого пустого расширения.
Внутри resolve.extensions
всегда такая конфигурация:
extensions: ['', '.js', '.jsx']
Почему это не может быть так:
extensions: ['.js', '.jsx']
Я пытаюсь понять, почему webpack требует этого пустого расширения.
Внутри resolve.extensions
всегда такая конфигурация:
extensions: ['', '.js', '.jsx']
Почему это не может быть так:
extensions: ['.js', '.jsx']
В документации :
Настройка этой опции отменяет значение по умолчанию, а это означает, что веб-пакет больше не будет пытаться разрешать модули с использованием расширений по умолчанию. Если вы хотите, чтобы модули, требуемые с расширением (например,
require('./somefile.ext')
), были правильно разрешены, вы должны включать пустую строку в свой массив. Аналогично, если вы хотите, чтобы модули, которые требовались без расширений (например,require('underscore')
), были разрешены к файлам с расширениями .js, вы должны включать".js"
в свой массив.
Другими словами, если вы не указали пустую строку и не нуждались в модуле в качестве ./foo.js
, вместо этого webpack будет искать ./foo.js.js
и ./foo.js.jsx
.
В новой версии Webpack вы не можете использовать пустую строку. В нем говорится:
Getting error: configuration.resolve.extensions[0] should not be empty
.
Вы должны использовать extensions: ['.js', '.jsx']
или extensions: ['*', '.js', '.jsx']
.
Расширение ''
действительно обязательно, если вы требуете файл по его имени:
Если вы хотите, чтобы модули, необходимые для их расширения (например,
require('./somefile.ext')
), были правильно разрешены, вы должны включать пустую строку в свой массив.
Webpack всегда будет использовать один из extensions
при попытке найти файл по строкам:
var fileName = nameGiven + extension[i];
fs.exists(fileName, ...);
Если nameGiven
содержит полное имя файла, например require('./foo.js')
, он все равно добавит каждое расширение:
'./foo.js' + '.js' // './foo.js.js' duplicated extension
'./foo.js' + '.jsx' // './foo.js.jsx' mixed extensions
По сравнению с:
'./foo.js' + '' // './foo.js' left as-is
Теперь это было изменено в webpack2.
Теперь вам нужно предоставить только:
resolve: {extensions: ['.js', '.es6']}
И если вы предоставите ''
в массиве, он выдает ошибку:
configuration.resolve.extensions [0] не должно быть пустым