Spec-Zone.ru › webpack 5

Публичный путь

Опция конфигурации publicPath может быть очень полезна в различных сценариях. Она позволяет указать базовый путь для всех ресурсов в вашем приложении.

Сценарии применения

Существует несколько сценариев применения в реальных приложениях, где эта функция особенно удобна. По сути, каждый файл, выводимый в ваш output.path каталог, будет ссылаться на output.publicPath расположение. Это включает дочерние фрагменты (созданные с помощью разбиения кода) и любые другие ресурсы (например, изображения, шрифты и т. д.), которые являются частью вашей зависимости.

Зависимость от среды

Например, в разработке у нас может быть папка assets/, которая находится на одном уровне с нашей страницей index. Это нормально, но что, если мы хотим разместить все эти статические ресурсы на CDN в продакшене?

Для решения этой проблемы вы можете легко использовать старую добрую переменную среды. Допустим, у нас есть переменная ASSET_PATH:

import webpack from 'webpack';

// Try the environment variable, otherwise use root
const ASSET_PATH = process.env.ASSET_PATH || '/';

export default {
  output: {
    publicPath: ASSET_PATH,
  },

  plugins: [
    // This makes it possible for us to safely use env vars on our code
    new webpack.DefinePlugin({
      'process.env.ASSET_PATH': JSON.stringify(ASSET_PATH),
    }),
  ],
};

Динамическое определение

Другой возможный сценарий — настройка publicPath динамически. Webpack предоставляет глобальную переменную __webpack_public_path__, которая позволяет это сделать. В точке входа вашего приложения вы можете сделать следующее:

__webpack_public_path__ = process.env.ASSET_PATH;

Этого достаточно. Поскольку мы уже используем DefinePlugin в нашей конфигурации, process.env.ASSET_PATH всегда будет определено, поэтому мы можем безопасно это сделать.

Предупреждение

Обратите внимание, что если вы используете импорты ES6 в своем файле входа, назначение __webpack_public_path__ будет выполнено после импортов. В таких случаях вам нужно будет перенести назначение публичного пути в отдельный модуль и затем импортировать его вверху вашего entry.js:

// entry.js
import './public-path';
import './app';

Автоматическое определение publicPath

Возможна ситуация, когда вы не знаете, каким будет publicPath заранее, и webpack может автоматически определить его, используя такие переменные, как import.meta.url, document.currentScript, script.src или self.location. Все, что вам нужно, это установить output.publicPath на значение 'auto':

webpack.config.js

module.exports = {
  output: {
    publicPath: 'auto',
  },
};

Обратите внимание, что в случаях, когда document.currentScript не поддерживается, например, в браузере IE, вам потребуется включить полифил, например currentScript Polyfill.

© JS Foundation and other contributors
Licensed under the Creative Commons Attribution License 4.0.
https://webpack.js.org/guides/public-path

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API