Запретить загрузчики Webpack по умолчанию
В Webpack встроен загрузчик JSON. Как я могу написать пользовательский загрузчик, который не пытается запустить встроенный загрузчик JSON на результат?
По сути, я хочу, чтобы мой загрузчик взял объект конфигурации (хранящийся в файле JSON) и сгенерировал исходный код из этой конфигурации, который больше не является допустимым JSON, это JavaScript (который впоследствии можно было передать через babel-loader).
Вот действительно глупый, надуманный пример. Исходный файл - это файл JSON, но я хочу, чтобы вывод моего загрузчика был неким JS.
погрузчик
function compile(doc) {
return `alert(${JSON.stringify(doc.title)})`
}
function myLoader(source) {
return compile(JSON.parse(source))
}
Конфигурация Webpack
rules: [
{
test: /\.json$/,
use: [
'babel-loader',
'my-loader',
],
},
],
Вместо этого я получаю эту ошибку:
ERROR in ./config.json
Module parse failed: Unexpected token ' in JSON at position 0
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token ' in JSON at position 0
at JSON.parse (<anonymous>)
at JsonParser.parse (.../node_modules/webpack/lib/JsonParser.js:15:21)
Как вы можете видеть из трассировки стека, это происходит из webpack/lib/JsonParser.js
, Как я могу сказать Webpack в первую очередь не запускать его встроенный анализатор JSON, а вместо этого делегировать обработку файлов JSON, которые соответствуют этому правилу, моему загрузчику?
1 ответ
Я думаю, что я понял это, хотя это, кажется, недокументированная особенность (по крайней мере, я не мог найти это в документации по конфигурации.
Похоже, что одно из свойств, которое вы можете передать в объекте Rule: type
, Установив его на javascript/auto
Вы можете переопределить JSON-анализатор по умолчанию и сделать так, чтобы он анализировал источник файла как JavaScript.
Это свойство находится в схеме JSON, используемой Webpack для проверки объекта конфигурации.
rules: [
{
test: /\.json$/,
use: [
'babel-loader',
'my-loader',
],
type: 'javascript/auto',
},
],