Вывод: настройка параметра вывода может управлять тем, как веб-пакет записывает скомпилированные файлы на жесткий диск. Обратите внимание: хотя может существовать несколько точек входа , указывается только одна выходная конфигурация .
Сначала мы инициализируем проект npm init
, устанавливаем webpack
и webpack-cli
локально, затем создаем папки index.html
, webpack.config.js
и src
в корневом каталоге и создаем в этой папке файл main.js
в качестве входного файла.
После завершения подготовительных работ получается так, как показано на рисунке:
Функцияmain.js
Компонент(){ вар div=document.createElement('div') div.innerHTML="Давайте вместе изучим настройку экспорта~" вернуть div } document.body.appendChild(Component())
index.html
<body> <script src="./dist/bundle.js"></script> </body>
package.json
"скрипты": { "test": "echo "Ошибка: тест не указан" && выход 1", "build":"webpack" //Добавить },
затем часть конфигурации webpack.config.js
Настройка параметра output
позволяет контролировать, как веб-пакет записывает скомпилированные файлы на жесткий диск.
Обратите внимание, что даже если может быть несколько точек入口
, указывается только одна输出
конфигурация.
Ниже приведены несколько концепций выходной конфигурации:
1.
Путь указывает расположение выходных данных ресурса, а требуемое значение должно быть абсолютным путем , например: :
const path=require('путь') модуль.exports={ запись:'./src/main.js', выход:{ имя файла: 'bundle.js', //Установим в качестве места вывода ресурса путь к каталогу dist проекта: path.resolve(__dirname, 'dist') }, }
После Webpack 4 по умолчанию выходным путем является каталог dist . Если нам не нужно его изменить, нет необходимости настраивать его отдельно, поэтому, если это webpack4 или выше, вы можете написать:
Module.exports={ запись:'./src/main.js', выход:{ имя файла: 'bundle.js', }, }
2. имя_файла
Функция имени_файла заключается в управлении именем файла выходного ресурса , которое имеет форму строки. Здесь я называю его bundle.js
, что означает, что я хочу, чтобы ресурсы выводились в файл с именем Bundle.js:
Module.exports={ запись:'./src/main.js', выход:{ имя файла: 'bundle.js', }, }
После упаковки, как показано на рисунке, автоматически будет создана папка dist
с файлом bundle.js
в ней.
имя файла может быть не только именем пакета, но и относительным путем.
Не имеет значения, если каталог в пути не существует. Webpack создаст каталог при выводе ресурсов, например:
модуль.exports = {. выход: { имя файла: './js/bundle.js', }, }
Как показано на рисунке после упаковки:
В сценарии с несколькими входами нам необходимо указать отдельное имя для каждого сгенерированного пакета. Webpack поддерживает использование формы, похожей на язык шаблонов, для динамического создания имен файлов .
Перед этим мы создаем новый файл записи в src
:
функция Компонент(){ вар div=document.createElement('div') div.innerHTML="Я второй файл записи" вернуть div } document.body.appendChild(Component())
webpack.config.js:
модуль.exports = { вход:{ основной:'./src/main.js', продавец:'./src/vender.js' }, выход: { имя файла: '[имя].js', }, }
Как показано на рисунке после упаковки:
[name]
в имени файла будет заменено именем чанка, а именно основным и поставщиком. Таким образом, в конце будут сгенерированы vendor.js
и main.js
Если вы хотите просмотреть содержимое, вам необходимо изменить содержимое в index.html
и сопоставить путь к последнему упакованному пакету
<body>. <script src="./dist/main.js"></script> <script src="./dist/vender.js"></script> </body>
[Вопрос] На данный момент возникнет необходимость. Как мы можем заставить
index.html
автоматически добавлять сгенерированный пакет в html? Здесь можно использовать плагин HtmlWebpackPlugin. Подробности см. ниже.
3.
Помимо [name]
, который может ссылаться на имя чанка, существует несколько других переменных шаблона, которые можно использовать в конфигурации имени файла:
Они могут: управлять кэшем клиента
. [hash]
и [chunkhash]
напрямую связаны с содержимым чанка. Если оно используется в имени файла, то при изменении содержимого чанка это также может привести к изменению имени файла ресурса, поэтому. что пользователь немедленно загрузит новую версию при следующем запросе файла ресурса без использования локального кеша.
[query]
также может иметь аналогичный эффект, но он не имеет ничего общего с содержимым чанка и должен быть указан разработчиком вручную.
4. publicPath
publicPath — очень важный элемент конфигурации, используемый для указания местоположения ресурсов при
загрузке. В качестве примера
импортируйте Img из './img.jpg'; функциональный компонент() { //... вар img = новое изображение (); myyebo.src = Img // URL-адрес запроса //... }
{ //... запрос: { имя: '[имя].[расширение]', выходной путь: 'static/img/', publicPath: './dist/static/img/' } }
Как показано в приведенном выше примере, исходный адрес запроса изображения — ./img.jpg
, но после добавления publicPath
в конфигурацию фактический путь становится ./dist/static/img/img.jpg
, поэтому изображения можно получить из упакованные ресурсы.
Существует 3 формы publicPath:
Связанные с HTML.
Мы можем указать publicPath в качестве относительного пути HTML. При запросе этих ресурсов путь к HTML-файлу текущей страницы будет добавлен к относительному пути для формирования фактического URL-адреса.
//Предположим, что текущий HTML-адрес: https://www.example.com/app/index.html. //Ресурс, загружаемый асинхронно, называется 1.chunk.js publicPath:"" //-->https://www.example.com/app/1.chunk.js pubilicPath:"./js" //-->https://www.example.com/app/js/1.chunk.js publicPath:"../assets/" //-->https://www.example.com/assets/1.chunk.js
Связано с хостом
Если значение publicPath начинается с "/", это означает, что publicPath по адресу на этот раз начинается с Имя хоста текущей страницы — это базовый путь
// Предположим, что текущий HTML-адрес: https://www.example.com/app/index.html //Ресурс, загружаемый асинхронно, называется 1.chunk.js publicPath:"/" //-->https://www.example.com/1.chunk.js pubilicPath:"/js/" //-->https://www.example.com/js/1.chunk.js,
связанный с CDN
. Два вышеуказанных пути являются относительными. Мы также можем использовать абсолютный путь для настройки publicPath
. Обычно ситуация возникает, когда статические ресурсы размещаются в CDN. Поскольку его доменное имя не соответствует имени домена текущей страницы, его необходимо указать в виде абсолютного пути.
При запуске publicPath в виде заголовка протокола или относительного. протокол, это означает, что текущий путь связан с CDN
. //Предположим, что текущий html-адрес: https://www.example.com/app/index.html. //Ресурс, загружаемый асинхронно, называется 1.chunk.js publicPath:"http://cdn.com/" //-->http://cdn.com/1.chunk.js publicPath:"https://cdn.com/" //-->https://cdn.com/1.chunk.js pubilicPath:"//cdn.com/assets" //-->//cdn.com/assets/1.chunk.js
1. Единый вход
Минимальное требование для настройки output
атрибута в веб-пакете — установить его значение для объекта, включая следующие два момента:
filename
— это имя выходного файла.path
к целевому выходному каталогуmod.exports={ запись:'./src/main.js', выход:{ имя файла: 'bundle.js', }, } //После версии webpack 4 dist будет генерироваться по умолчанию, поэтому путь здесь опущен.
2.
Если конфигурация создает несколько отдельных «кусков», вам следует использовать заполнители, чтобы каждый файл имел уникальное имя
. здесь используется [name]
указанного имени файла.
Кроме того, если вы хотите поместить эти ресурсы в указанную папку, вы можете добавить конфигурацию path
mod.exports={. вход: { основной: './src/main.js', продавец: './src/vender.js' }, выход: { имя файла: '[имя].js', путь: __dirname + '/dist/assets' //Укажите, что упакованный пакет помещен в каталог /dist/assets} } // Генерируем после упаковки: ./dist/assets/main.js, ./dist/assets/vender.js
Остальные проблемы, описанные выше в этой главе, можно решить с помощью плагина HtmlWebpackPlugin
Установите плагин
npm install --save-dev html-webpack-plugin
настройте плагин
const HtmlWebpackPlugin=require('html-webpack-plugin') //Загрузить модуль Module.exports = { вход:{ основной:'./src/main.js', продавец:'./src/vender.js' }, //Добавляем плагины плагины:[ новый HtmlWebpackPlugin({ title:'управление выводом' }) ], выход: { имя файла: '[имя].js', }, };После завершения
упаковки
вы обнаружите, что в dist появляется новый index.html
, который автоматически добавляет нам сгенерированные ресурсы. После открытия вы обнаружите, что браузер отобразит содержимое.
Это означает, что вам не нужно будет писать index.html
при инициализации проекта в будущем.
Исходный код можно получить здесь:
https://sanhuamao1.coding.net/public/webpack-test/webpack-test/git/. файлы