#webpack
#webpack
Вопрос:
Прочитав документы webpack config docs, я наткнулся на кое-что, что я не могу полностью понять.
Насколько я знаю, мы можем определить глобальную константу, DefinePlugin
как показано ниже, во время компиляции (сборки).
new webpack.DefinePlugin({
PRODUCTION: JSON.stringify(true),
VERSION: JSON.stringify('5fa3b9'),
BROWSER_SUPPORTS_HTML5: true,
TWO: '1 1'
});
Как мы можем видеть выше, для ключей не требуется никаких кавычек.
Но мы должны использовать кавычки для включения или отключения флагов функций, как показано ниже.
new webpack.DefinePlugin({
'NICE_FEATURE': JSON.stringify(true),
'EXPERIMENTAL_FEATURE': JSON.stringify(false)
});
Я мог бы догадаться, похожи ли эти флаги функций на зарезервированные ключевые слова.
Но я не могу найти список флагов функций, предоставляемых webpack по умолчанию.
Так что же это за флаги функций? Почему мы должны использовать эти кавычки вокруг ключей при включении / отключении флагов функций?
Заранее спасибо.
Ответ №1:
DefinePlugin
это плагин, который заменяет переменные внутри вашего пакета настроенными значениями.
Он принимает обычный POJO (обычный старый объект JavaScript), это означает, что все правила, которые применяются к POJO, должны применяться к объекту конфигурации.
На самом деле,
new webpack.DefinePlugin({
NICE_FEATURE: JSON.stringify(true),
EXPERIMENTAL_FEATURE: JSON.stringify(false)
});
также является допустимой конфигурацией объекта.
Если имя вашей переменной будет содержать какой-либо недопустимый символ для ключа объекта, вы должны заключить его в кавычки.
Например, обычно используется DefinePluin
для замены process.env.NODE_ENV
на его значение. Поскольку .
символ не является допустимым символом для ключа объекта в JS, его следует заключить в кавычки.
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(true),
// --------------------^
});
«Запутанная» часть DefinePlugin
заключается в том, что для нее требуется допустимая строка в качестве значения, поскольку она заменяет переменные в стороне от пакета.
Учтите, что ваше значение заключено в кавычки (скажем, company name with "
), поэтому для достижения этого значения должна быть допустимая строка "company name with ""
, обычно используемая ppl JSON.stringify
, которая экранирует любые символы, связанные с json, одним из которых является "
char .
Надеюсь, это поможет :]