Вывод
Ключ верхнего уровня output содержит набор опций, указывающих webpack, как и где выводить ваши пакеты, ресурсы и все остальное, что вы объединяете или загружаете с помощью webpack.
output.auxiliaryComment
string object
При использовании в сочетании с output.library и output.libraryTarget, эта опция позволяет пользователям вставлять комментарии в оберточку экспорта. Чтобы вставить тот же комментарий для каждого типа libraryTarget, установите auxiliaryComment в строку:
webpack.config.js
module.exports = {
//...
output: {
library: 'someLibName',
libraryTarget: 'umd',
filename: 'someLibName.js',
auxiliaryComment: 'Test Comment'
}
}; что приведет к следующему:
webpack.config.js
(function webpackUniversalModuleDefinition(root, factory) {
// Test Comment
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require('lodash'));
// Test Comment
else if(typeof define === 'function' && define.amd)
define(['lodash'], factory);
// Test Comment
else if(typeof exports === 'object')
exports['someLibName'] = factory(require('lodash'));
// Test Comment
else
root['someLibName'] = factory(root['_']);
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {
// ...
}); Для более точного управления каждым комментарием libraryTarget, передайте объект:
webpack.config.js
module.exports = {
//...
output: {
//...
auxiliaryComment: {
root: 'Root Comment',
commonjs: 'CommonJS Comment',
commonjs2: 'CommonJS2 Comment',
amd: 'AMD Comment'
}
}
};
output.chunkFilename
string = '[id].js'
Эта опция определяет имя файлов фрагментов, не являющихся точками входа. Подробности о возможных значениях см. в опции output.filename.
Обратите внимание, что эти имена файлов необходимо генерировать во время выполнения, чтобы отправлять запросы на фрагменты. Из-за этого такие плейсхолдеры, как [name] и [chunkhash] должны добавить отображение от идентификатора фрагмента к значению плейсхолдера в выходной пакет с помощью времени выполнения webpack. Это увеличивает размер и может сделать пакет недействительным, если значение плейсхолдера для любого фрагмента изменится.
По умолчанию используется [id].js или значение, полученное из output.filename ([name] заменяется на [id] или [id]. добавляется в начало).
webpack.config.js
module.exports = {
//...
output: {
//...
chunkFilename: '[id].js'
}
};
output.chunkLoadTimeout
number = 120000
Количество миллисекунд до истечения срока действия запроса фрагмента. Эта опция поддерживается с webpack 2.6.0.
webpack.config.js
module.exports = {
//...
output: {
//...
chunkLoadTimeout: 30000
}
};
output.crossOriginLoading
boolean = false string: 'anonymous' | 'use-credentials'
Указывает webpack на включение загрузки фрагментов из разных доменов cross-origin. Действует только при установке target на 'web', которая использует JSONP для загрузки фрагментов по запросу, добавляя теги script.
-
'anonymous'- Включить загрузку из разных доменов без учётных данных -
'use-credentials'- Включить загрузку из разных доменов с учётными данными
output.jsonpScriptType
string = 'text/javascript': 'module' | 'text/javascript'
Позволяет настроить атрибут type тегов script, которые webpack вставляет в DOM для загрузки асинхронных фрагментов.
-
'text/javascript': Значение по умолчаниюtypeв HTML5 и необходимо для некоторых браузеров в HTML4. -
'module': Принуждает обработать код как модуль JavaScript.
output.devtoolFallbackModuleFilenameTemplate
string function (info)
Резервный вариант, используемый, когда шаблон строки или функция выше генерируют дубликаты.
См. output.devtoolModuleFilenameTemplate.
output.devtoolLineToLine
boolean = false object: { test string | RegExp, include string | RegExp, exclude string | RegExp}
Избегайте использования этой опции, так как она устарела и вскоре будет удалена.
Включает отображение строк на строки для всех или некоторых модулей. Это создает простую карту исходных данных, где каждая строка сгенерированного исходного кода сопоставляется с той же строкой исходного кода. Это оптимизация производительности и должна использоваться только в том случае, если все строки входных данных соответствуют строкам выходных данных.
Передайте логическое значение для включения или выключения этой функции для всех модулей (по умолчанию false). Используйте object для точного управления, например, чтобы включить эту функцию для всех файлов JavaScript в определенном каталоге:
webpack.config.js
module.exports = {
//...
output: {
devtoolLineToLine: { test: /\.js$/, include: 'src/utilities' }
}
};
output.devtoolModuleFilenameTemplate
string = 'webpack://[namespace]/[resource-path]?[loaders]' function (info) => string
Эта опция используется только тогда, когда devtool использует параметры, которые требуют имён модулей.
Настройте имена, используемые в массиве sources каждой карты исходных данных. Это можно сделать, передав шаблон строки или функцию. Например, при использовании devtool: 'eval'.
webpack.config.js
module.exports = {
//...
output: {
devtoolModuleFilenameTemplate: 'webpack://[namespace]/[resource-path]?[loaders]'
}
}; Следующие подстановки доступны в строковых шаблонах (через внутренний механизм webpack ModuleFilenameHelpers):
| Шаблон | Описание |
|---|---|
| [absolute-resource-path] Полное имя файла | Полное имя файла |
| [all-loaders] Автоматические и явные загрузчики и параметры до имени первого загрузчика | Автоматические и явные загрузчики и параметры до имени первого загрузчика |
| [hash] Хэш идентификатора модуля | Хэш идентификатора модуля |
| [id] Идентификатор модуля | Идентификатор модуля |
| [loaders] Явные загрузчики и параметры до имени первого загрузчика | Явные загрузчики и параметры до имени первого загрузчика |
| [resource] Путь, используемый для разрешения файла и любые параметры запроса, используемые на первом загрузчике | Путь, используемый для разрешения файла и любые параметры запроса, используемые на первом загрузчике |
| [resource-path] Путь, используемый для разрешения файла без параметров запроса | Путь, используемый для разрешения файла без параметров запроса |
| [namespace] Пространство имён модулей. Обычно имя библиотеки при построении как библиотеки, в противном случае пустое | Пространство имён модулей. Обычно имя библиотеки при построении как библиотеки, в противном случае пустое |
При использовании функции те же опции доступны с использованием регистро-зависимого написания через параметр info:
module.exports = {
//...
output: {
devtoolModuleFilenameTemplate: info => {
return `webpack:///${info.resourcePath}?${info.loaders}`;
}
}
}; Если несколько модулей приведут к одному имени, используется output.devtoolFallbackModuleFilenameTemplate вместо этих модулей.
output.devtoolNamespace
string
Эта опция определяет пространство имен модулей, используемое с output.devtoolModuleFilenameTemplate. Если не указано, оно будет по умолчанию равно значению output.library. Используется для предотвращения столкновений путей к исходным файлам в картах исходных данных при загрузке нескольких библиотек, скомпилированных с помощью webpack.
Например, если у вас есть 2 библиотеки с именами пространств library1 и library2, которые оба имеют файл ./src/index.js (с потенциально различным содержимым), они будут предоставлять эти файлы как webpack://library1/./src/index.js и webpack://library2/./src/index.js.
output.filename
string function (chunkData) => string
Эта опция определяет имя каждого выходного пакета. Пакет записывается в каталог, указанный опцией output.path.
Для единственной точки входа entry это может быть статическое имя.
webpack.config.js
module.exports = {
//...
output: {
filename: 'bundle.js'
}
}; Однако при создании нескольких пакетов через более одной точки входа, разделении кода или различных плагинах вы должны использовать одну из следующих подстановок, чтобы дать каждому пакету уникальное имя...
Использование имени входа:
webpack.config.js
module.exports = {
//...
output: {
filename: '[name].bundle.js'
}
}; Использование внутреннего идентификатора фрагмента:
webpack.config.js
module.exports = {
//...
output: {
filename: '[id].bundle.js'
}
}; Использование уникального хэша, сгенерированного для каждого построения:
webpack.config.js
module.exports = {
//...
output: {
filename: '[name].[hash].bundle.js'
}
}; Использование хэшей, основанных на содержимом каждого фрагмента:
webpack.config.js
module.exports = {
//...
output: {
filename: '[chunkhash].bundle.js'
}
}; Использование хэшей, сгенерированных для извлечённого содержимого:
webpack.config.js
module.exports = {
//...
output: {
filename: '[contenthash].bundle.css'
}
}; Использование функции для возвращения имени файла:
webpack.config.js
module.exports = {
//...
output: {
filename: (chunkData) => {
return chunkData.chunk.name === 'main' ? '[name].js': '[name]/[name].js';
},
}
}; Убедитесь, что вы прочитали руководство по кэшированию Caching guide для получения подробностей. В этом случае задействовано больше шагов, чем просто установка этой опции.
Обратите внимание, что эта опция называется filename, но вы по-прежнему можете использовать что-то вроде 'js/[name]/bundle.js' для создания структуры каталогов.
Обратите внимание, что эта опция не влияет на выходные файлы для фрагментов, загружаемых по запросу. Для этих файлов используется опция output.chunkFilename. Файлы, созданные загрузчиками, также не затрагиваются. В этом случае вам необходимо попробовать доступные опции конкретного загрузчика.
Следующие подстановки доступны в строковых шаблонах (через внутренний механизм webpack TemplatedPathPlugin):
| Шаблон | Описание |
|---|---|
| [hash] Хэш идентификатора модуля | Хэш идентификатора модуля |
| [contenthash] хэш содержимого файла, отличающийся для каждого ресурса | хэш содержимого файла, отличающийся для каждого ресурса |
| [chunkhash] Хэш содержимого чанка | Хэш содержимого чанка |
| [name] Название модуля | Название модуля |
| [id] Идентификатор модуля | Идентификатор модуля |
| [query] Запрос модуля, т.е. строка, следующая за | Запрос модуля, т.е. строка, следующая за ? в имени файла |
| [function] Функция, которая может возвращать имя файла [строка] | Функция, которая может возвращать имя файла [ строка ] |
Длину [hash] и [chunkhash] можно указать с помощью [hash:16] (по умолчанию 20). В качестве альтернативы укажите output.hashDigestLength для глобальной настройки длины.
Можно отфильтровать замену плейсхолдера, когда вы хотите использовать один из плейсхолдеров в фактическом имени файла. Например, чтобы вывести файл [name].js, необходимо экранировать плейсхолдер [name] добавлением обратных слешей между скобками. Таким образом, [\name\] сгенерирует [name] вместо того, чтобы быть заменённым значением name ресурса.
Пример: [\id\] генерирует [id] вместо замены на id.
При использовании функции для этого параметра функция будет получать объект, содержащий замены из таблицы выше.
При использовании
ExtractTextWebpackPlugin, используйте[contenthash]для получения хэша извлечённого файла (ни[hash]ни[chunkhash]не работают).
output.globalObject
string = 'window'
При нацеливании на библиотеку, особенно когда libraryTarget равно 'umd', этот параметр указывает, какой глобальный объект будет использоваться для монтажа библиотеки. Чтобы сделать сборку UMD доступной как для браузеров, так и для Node.js, установите параметр output.globalObject в 'this'.
Например:
webpack.config.js
module.exports = {
// ...
output: {
library: 'myLib',
libraryTarget: 'umd',
filename: 'myLib.js',
globalObject: 'this'
}
};
output.hashDigest
string = 'hex'
Кодировка, используемая при генерации хэша. Поддерживаются все кодировки из hash.digest Node.JS. Использование 'base64' для имён файлов может быть проблематично, так как в нём есть символ / в алфавите. Аналогично, 'latin1' может содержать любые символы.
output.hashDigestLength
number = 20
Длина префикса хэш-дайджеста для использования.
output.hashFunction
string = 'md4' function
Алгоритм хэширования для использования. Поддерживаются все функции из crypto.createHash Node.JS. Начиная с 4.0.0-alpha2, hashFunction теперь может быть конструктором пользовательской функции хэширования. Вы можете предоставить функцию хэширования не из криптографии для повышения производительности.
module.exports = {
//...
output: {
hashFunction: require('metrohash').MetroHash64
}
}; Убедитесь, что функция хэширования имеет доступные методы update и digest.
output.hashSalt
Необязательная соль для обновления хэша через hash.update Node.JS.
output.hotUpdateChunkFilename
string = '[id].[hash].hot-update.js' function (chunkData) => string
Настройте имена файлов чанков горячих обновлений. См. параметр output.filename для подробной информации о возможных значениях.
Здесь разрешены только плейсхолдеры [id] и [hash], по умолчанию:
webpack.config.js
module.exports = {
//...
output: {
hotUpdateChunkFilename: (chunkData) => {
return `${chunkData.chunk.name === 'main' ? '' : '[name]/'}[id].[hash].hot-update.js`;
}
}
}; Обычно менять
output.hotUpdateChunkFilenameне нужно.
output.hotUpdateFunction
string
Используется только при target задано 'web', где для загрузки горячих обновлений используется JSONP.
Функция JSONP, используемая для асинхронной загрузки чанков горячих обновлений.
Подробности см. в output.jsonpFunction.
output.hotUpdateMainFilename
string = '[hash].hot-update.json' function
Настройте имя файла основного горячего обновления. Доступен только плейсхолдер [hash].
Обычно менять
output.hotUpdateMainFilenameне нужно.
output.jsonpFunction
string = 'webpackJsonp'
Используется только когда target равно 'web', что использует JSONP для загрузки запрошенных чанков.
Имя функции JSONP, используемой для асинхронной загрузки чанков или объединения нескольких начальных чанков (SplitChunksPlugin, AggressiveSplittingPlugin).
Если используется параметр output.library, имя библиотеки автоматически конкатенируется со значением output.jsonpFunction.
Если на одной веб-странице используются несколько запусков webpack (из разных компиляций), существует риск конфликтов запрошенных чанков в глобальном пространстве имён.
По умолчанию, вывод запрошенного чанка начинается с:
example-on-demand-chunk.js
(window.webpackJsonp = window.webpackJsonp || []).push(/* ... */);
Измените output.jsonpFunction для безопасного использования нескольких запусков webpack на одной веб-странице:
webpack.config.flight-widget.js
module.exports = {
//...
output: {
jsonpFunction: 'wpJsonpFlightsWidget'
}
}; Содержимое запрошенных чанков теперь изменится на:
example-on-demand-chunk.js
(window.wpJsonpFlightsWidget = window.wpJsonpFlightsWidget || []).push(/* ... */);
output.library
string object
Может быть передан
objectначиная с webpack 3.1.0. Эффективно дляlibraryTarget: 'umd'.
Способ использования значения output.library зависит от значения параметра output.libraryTarget; пожалуйста, обратитесь к этому разделу за полными подробностями. Обратите внимание, что значение по умолчанию для output.libraryTarget - var, поэтому, если используется следующий параметр конфигурации:
webpack.config.js
module.exports = {
//...
output: {
library: 'MyLibrary'
}
}; Переменная MyLibrary будет связана со значением, возвращаемым вашим входным файлом, если результирующий вывод включён в виде тега script на странице HTML.
Обратите внимание, что если в качестве точки входа предоставлен
arrayв виде массива, только последний модуль в массиве будет экспортирован. Если предоставленentryв виде объекта, его можно экспортировать, используя синтаксисobject(см. пример для получения более подробной информации).
Для получения дополнительной информации о создании библиотек, а также о
output.library, прочитайте руководство по созданию библиотекoutput.libraryTarget.
output.libraryExport
string [string]
Настройте, какой модуль или модули будут экспортированы через libraryTarget. По умолчанию это undefined, аналогичное поведение будет применено, если вы зададите libraryTarget пустой строкой, например '', оно экспортирует весь объект (пространство имён). Примеры ниже демонстрируют эффект этой конфигурации при использовании libraryTarget: 'var'.
Поддерживаются следующие конфигурации:
libraryExport: 'default' - Значение по умолчанию вашего входного модуля будет назначено целевому объекту библиотеки:
// if your entry has a default export of `MyDefaultModule` var MyDefaultModule = _entry_return_.default;
libraryExport: 'MyModule' - Будет назначен указанный модуль целевому объекту библиотеки:
var MyModule = _entry_return_.MyModule;
libraryExport: ['MyModule', 'MySubModule'] - Массив интерпретируется как путь к модулю, который будет назначен целевому объекту библиотеки:
var MySubModule = _entry_return_.MyModule.MySubModule;
При указанных выше конфигурациях libraryExport, результирующие библиотеки могут быть использованы следующим образом:
MyDefaultModule.doSomething(); MyModule.doSomething(); MySubModule.doSomething();
output.libraryTarget
string = 'var'
Настройте способ экспорта библиотеки. Можно использовать любой из следующих вариантов. Обратите внимание, что этот параметр работает совместно со значением, назначенным параметру output.library. В следующих примерах предполагается, что это значение настроено как MyLibrary.
Обратите внимание, что
_entry_return_в приведённом ниже коде примера — это значение, возвращаемое точкой входа. В самом пакете это результат работы функции, сгенерированной webpack из точки входа.
Экспорт переменной
Эти параметры назначают значение, возвращаемое точкой входа (например, то, что экспортировала точка входа), имени, предоставленному output.library, в той области видимости, где пакет был включён.
libraryTarget: 'var' - (по умолчанию) При загрузке вашей библиотеки значение, возвращаемое точкой входа, будет назначено переменной:
var MyLibrary = _entry_return_; // In a separate script... MyLibrary.doSomething();
При использовании этого параметра пустой
output.libraryприведёт к отсутствию назначения.
libraryTarget: 'assign' - Это сгенерирует неявную глобальную переменную, которая потенциально может перезаписать существующее значение (используйте с осторожностью).
MyLibrary = _entry_return_;
Обратите внимание, что если MyLibrary не определено ранее, ваша библиотека будет установлена в глобальной области.
При использовании этого параметра пустой
output.libraryприведёт к повреждению пакета вывода.
Экспонирование через присваивание объекту
Эти параметры присваивают возвращаемое значение точки входа (например, то, что экспортировала точка входа) определённому объекту под именем, заданным в output.library.
Если output.library не присвоено непустая строка, то по умолчанию все свойства, возвращаемые точкой входа, присваиваются объекту, как определено для конкретного output.libraryTarget, с помощью следующего фрагмента кода:
(function(e, a) { for(var i in a) { e[i] = a[i]; } }(output.libraryTarget, _entry_return_)); Обратите внимание, что если не задать
output.library, все свойства, возвращаемые точкой входа, будут присвоены указанному объекту; проверки на существование имеющихся имён свойств не производятся.
libraryTarget: "this" — значение возвращаемое вашей точкой входа будет присвоено этому под свойством, имя которого задано в output.library. Значение this определяется вами:
this['MyLibrary'] = _entry_return_; // In a separate script... this.MyLibrary.doSomething(); MyLibrary.doSomething(); // if this is window
libraryTarget: 'window' — значение возвращаемое вашей точкой входа будет присвоено объекту window с использованием значения output.library.
window['MyLibrary'] = _entry_return_; window.MyLibrary.doSomething();
libraryTarget: 'global' — значение возвращаемое вашей точкой входа будет присвоено объекту global с использованием значения output.library.
global['MyLibrary'] = _entry_return_; global.MyLibrary.doSomething();
libraryTarget: 'commonjs' — значение возвращаемое вашей точкой входа будет присвоено объекту exports с использованием значения output.library. Как следует из названия, это используется в средах CommonJS.
exports['MyLibrary'] = _entry_return_;
require('MyLibrary').doSomething(); Системы определения модулей
Эти параметры приведут к созданию сборки с более полным заголовком, чтобы обеспечить совместимость с различными системами модулей. Параметр output.library будет иметь другое значение в следующих параметрах output.libraryTarget.
libraryTarget: 'commonjs2' — значение возвращаемое вашей точкой входа будет присвоено module.exports. Как следует из названия, это используется в средах CommonJS:
module.exports = _entry_return_;
require('MyLibrary').doSomething(); Обратите внимание, что output.library опущено, поэтому оно не требуется для этого конкретного output.libraryTarget.
Интересуетесь различием между CommonJS и CommonJS2? Хотя они похожи, между ними есть некоторые тонкие различия, которые обычно не важны в контексте webpack. (Для получения более подробной информации, пожалуйста, прочитайте этот вопрос.)
libraryTarget: 'amd' — это экспортирует вашу библиотеку как модуль AMD.
Модули AMD требуют, чтобы начальный фрагмент (например, первый загруженный скрипт тегом <script>) был определён со специфическими свойствами, такими как define и require, которые обычно предоставляются RequireJS или любыми совместимыми загрузчиками (такими как almond). В противном случае, непосредственная загрузка полученной сборки AMD приведёт к ошибке типа define is not defined.
Итак, при следующей конфигурации...
module.exports = {
//...
output: {
library: 'MyLibrary',
libraryTarget: 'amd'
}
}; Сгенерированный вывод будет определён под именем «MyLibrary», т.е.
define('MyLibrary', [], function() {
return _entry_return_;
}); Сборка может быть включена в качестве части тега script, и сборка может быть вызвана следующим образом:
require(['MyLibrary'], function(MyLibrary) {
// Do something with the library...
}); Если output.library не определено, вместо этого генерируется следующее.
define([], function() {
return _entry_return_;
}); Эта сборка не будет работать как ожидается или вообще не будет работать (в случае загрузчика almond), если загружена непосредственно с помощью тега <script>. Она будет работать только через совместимый с RequireJS асинхронный загрузчик модулей через фактический путь к этому файлу, поэтому в этом случае output.path и output.filename могут стать важными для данной настройки, если они будут экспортированы напрямую на сервер.
libraryTarget: 'amd-require' — это упаковывает ваш вывод с немедленно исполняемым оболочкой AMD require(dependencies, factory).
Цель 'amd-require' позволяет использовать зависимости AMD без необходимости отдельного последующего вызова. Как и цель 'amd', это зависит от доступности соответствующей require функции в среде, в которой загружается вывод webpack.
С этой целью имя библиотеки игнорируется.
libraryTarget: 'umd' — это экспортирует вашу библиотеку под всеми определениями модулей, что позволяет ей работать с CommonJS, AMD и как глобальной переменной. Посмотрите на репозиторий UMD, чтобы узнать больше.
В этом случае вам необходимо свойство library для именования вашего модуля:
module.exports = {
//...
output: {
library: 'MyLibrary',
libraryTarget: 'umd'
}
}; И, наконец, вывод:
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports['MyLibrary'] = factory();
else
root['MyLibrary'] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return _entry_return_;
}); Обратите внимание, что опускание library приведёт к непосредственному присвоению всех свойств, возвращаемых точкой входа, непосредственно корневому объекту, как описано в разделе присваивания объекту. Пример:
module.exports = {
//...
output: {
libraryTarget: 'umd'
}
}; Вывод будет:
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(typeof self !== 'undefined' ? self : this, function() {
return _entry_return_;
}); Начиная с webpack 3.1.0, вы можете указать объект для library для различных имён по целям:
module.exports = {
//...
output: {
library: {
root: 'MyLibrary',
amd: 'my-library',
commonjs: 'my-common-library'
},
libraryTarget: 'umd'
}
}; libraryTarget: 'system' — это экспортирует вашу библиотеку как System.register модуль. Эта функция была впервые выпущена в webpack 4.30.0.
Модули System требуют, чтобы глобальная переменная System была присутствующей в браузере во время выполнения сборки webpack. Компиляция в формат System.register позволяет вам System.import('/bundle.js') без дополнительной конфигурации и загрузить вашу сборку webpack в реестр модулей System.
module.exports = {
//...
output: {
libraryTarget: 'system'
}
}; Вывод:
System.register([], function(_export) {
return {
setters: [],
execute: function() {
// ...
},
};
}); Добавив output.library в конфигурацию, а также установив output.libraryTarget в system, выходная сборка будет иметь имя библиотеки в качестве аргумента для System.register.
System.register('my-library', [], function(_export) {
return {
setters: [],
execute: function() {
// ...
},
};
}); Библиотека для проверки модулей.
Другие цели
libraryTarget: 'jsonp' — это обернёт возвращаемое значение вашей точки входа в оболочку jsonp.
MyLibrary(_entry_return_);
Зависимости вашей библиотеки будут определены конфигурацией externals.
output.path
string: path.join(process.cwd(), 'dist')
Директория вывода в виде абсолютного пути.
webpack.config.js
module.exports = {
//...
output: {
path: path.resolve(__dirname, 'dist/assets')
}
}; Обратите внимание, что [hash] в этом параметре будет заменено хэшем компиляции. Подробности см. в руководстве по кэшированию.
output.pathinfo
boolean
Указывает webpack на включение в сборки комментариев с информацией о содержащихся модулях. По умолчанию этот параметр равен true в режиме development и false в режиме production mode соответственно.
Хотя данные, которые могут предоставить эти комментарии, очень полезны во время разработки при чтении сгенерированного кода, их не следует использовать в производстве.
webpack.config.js
module.exports = {
//...
output: {
pathinfo: true
}
}; Он также добавляет некоторую информацию о удалении лишнего кода в сгенерированную сборку.
output.publicPath
string = '' function
Этот параметр важен при использовании динамической загрузки или загрузки внешних ресурсов, таких как изображения, файлы и т.д. Если указано неверное значение, при загрузке этих ресурсов будут появляться ошибки 404.
Этот параметр определяет публичный URL каталога вывода при ссылке на него в браузере. Относительный URL разрешается относительно HTML-страницы (или тега <base>). Также возможны и иногда необходимы серверные относительные URL-адреса, URL-адреса с протоколом или абсолютные URL-адреса, например, при размещении ресурсов на CDN.
Значение параметра добавляется в начало каждого URL-адреса, созданного модулем runtime или загрузчиками. Поэтому значение этого параметра в большинстве случаев заканчивается на /.
Простое правило: URL вашего output.path с точки зрения HTML-страницы.
webpack.config.js
module.exports = {
//...
output: {
path: path.resolve(__dirname, 'public/assets'),
publicPath: 'https://cdn.example.com/assets/'
}
}; Для этой конфигурации:
webpack.config.js
module.exports = {
//...
output: {
publicPath: '/assets/',
chunkFilename: '[id].chunk.js'
}
}; Запрос к фрагменту будет выглядеть как /assets/4.chunk.js.
Загрузчик, выводивший HTML, мог бы вывести что-то вроде этого:
<link href="/assets/spinner.gif" />
или при загрузке изображения в CSS:
background-image: url(/assets/spinner.gif);
Webpack-dev-сервер также получает подсказку из publicPath, используя её для определения места предоставления файлов вывода.
Обратите внимание, что [hash] в этом параметре будет заменено хэшем компиляции. Подробности см. в руководстве по кэшированию.
Примеры:
module.exports = {
//...
output: {
// One of the below
publicPath: 'https://cdn.example.com/assets/', // CDN (always HTTPS)
publicPath: '//cdn.example.com/assets/', // CDN (same protocol)
publicPath: '/assets/', // server-relative
publicPath: 'assets/', // relative to HTML page
publicPath: '../assets/', // relative to HTML page
publicPath: '', // relative to HTML page (same directory)
}
}; В случаях, когда publicPath файлов вывода нельзя узнать во время компиляции, его можно оставить пустым и установить динамически во время выполнения в файле входа с помощью свободной переменной __webpack_public_path__.
__webpack_public_path__ = myRuntimePublicPath; // rest of your application entry
См. это обсуждение для получения дополнительной информации о __webpack_public_path__.
output.sourceMapFilename
string = '[file].map[query]'
Настройте, как будут именоваться карты исходного кода. Действует только тогда, когда devtool задано значение 'source-map', которое записывает выходной файл.
Замены [name], [id], [hash] и [chunkhash] из output.filename могут быть использованы. В дополнение к ним вы можете использовать замены, перечисленные ниже. Заполнитель [file] заменяется именем файла исходного файла. Мы рекомендуем использовать только заполнитель [file], так как другие плейсхолдеры не будут работать при генерации карт исходного кода для файлов, не являющихся фрагментами.
| Шаблон | Описание |
|---|---|
| [file] Имя файла модуля | Имя файла модуля |
| [filebase] Имена файла модуля basename | Имена файла модуля basename |
output.sourcePrefix
string = ''
Изменение префикса каждой строки в выходных сборках.
webpack.config.js
module.exports = {
//...
output: {
sourcePrefix: '\t'
}
}; Использование какого-либо отступа делает пакеты более красивыми, но может вызвать проблемы с многострочными строками.
Обычно вам не нужно изменять
output.sourcePrefix.
output.strictModuleExceptionHandling
boolean = false
Укажите webpack, чтобы удалить модуль из кэша экземпляров модулей (require.cache) если он генерирует исключение при его require.
По умолчанию используется значение false по соображениям производительности.
Если установлено значение false, модуль не удаляется из кэша, что приводит к тому, что исключение генерируется только при первом require вызове (что делает его несовместимым с node.js).
Например, рассмотрите module.js:
throw new Error('error'); При установке strictModuleExceptionHandling на значение false, только первый require генерирует исключение:
// with strictModuleExceptionHandling = false
require('module'); // <- throws
require('module'); // <- doesn't throw Вместо этого, при установке strictModuleExceptionHandling на значение true, все require этого модуля генерируют исключение:
// with strictModuleExceptionHandling = true
require('module'); // <- throws
require('module'); // <- also throws
output.umdNamedDefine
boolean
При использовании libraryTarget: "umd", установка output.umdNamedDefine на true даст имя AMD-модулю в сборке UMD. В противном случае используется анонимный define.
module.exports = {
//...
output: {
umdNamedDefine: true
}
};
output.futureEmitAssets
boolean = false
Указывает webpack использовать будущую версию логики вывода ресурсов, что позволяет освобождать память ресурсов после вывода. Это может нарушить плагины, которые предполагают, что ресурсы все еще доступны для чтения после их вывода.
Опция
output.futureEmitAssetsбудет удалена в webpack v5.0.0, и это поведение станет новым по умолчанию.
module.exports = {
//...
output: {
futureEmitAssets: true
}
};
© JS Foundation and other contributors
Licensed under the Creative Commons Attribution License 4.0.
https://v4.webpack.js.org/configuration/output