Удалить часть пути для загрузчика файлов веб-пакета

Я настраиваю Webpack 3 и в настоящее время настраиваю управление активами статических изображений, которые я хотел бы скопировать из моей папки src в мою папку dist. Я хотел бы сохранить структуру файлов моего /img папка на месте, поскольку она копируется в папку dist, но проблема, с которой я сталкиваюсь, заключается в том, где я пытаюсь удалить часть заполнителя пути. Возможно ли то, что я пытаюсь достичь?

У меня есть мое правило:

  {
      test: /\.(png|jpe?g|gif|ico)$/,
      use: [{
          loader: 'file-loader',
          options: {
              name: '[path][name].[ext]?[hash]',
              //outputPath: 'img/'
          }
      }]
  }

И это захватывает изображения из моего файла точки входа через контекст:

require.context('./img/', true, /\.(png|jpe?g|gif|ico)$/);

Однако, когда файл будет скопирован, так как у меня есть заполнитель [path] как часть имени, файлы будут напоминать /src/img/[name].[extension]?[hash], Я хотел бы сохранить оставшуюся часть пути нетронутой, так как некоторые изображения имеют такие пути, как /src/img/favicons/[name].[extension]?[hash] и я чувствую, что папка dist должна поддерживать эту структуру. Как вы можете видеть по коду, я пытался использовать outputPath, но это просто устанавливает файл в /img/src/img/[name].extension?[hash], Я также пытался использовать настройку publicPath, но она, похоже, не имела никакого эффекта. Конечная цель состоит в том, чтобы указанные выше 2 файла не имели /src часть имени файла включена в этот путь.

3 ответа

Контекстная опция - это то, что вы ищете, в вашем случае:

  {
      test: /\.(png|jpe?g|gif|ico)$/,
      use: [{
          loader: 'file-loader',
          options: {
              name: '[path][name].[ext]?[hash]',
              context: 'src'
          }
      }]
  }

На тот случай, если вы сами не решили это: useRelativePath опция, которая позволяет сохранить относительный путь. Кроме того, вы можете использовать обратный вызов в outputPath, чтобы изменить то, что он возвращает, если вы не хотите, чтобы такие вещи, как ../ там.

Док на обе вещи:

С помощью webpack 4 вы можете выводить данные в каталог пользователя, в данном случае в каталог родительской папки, следующим образом:

  {
    test: /\.(png|jpe?g|gif|ico)$/,
    exclude: [/some-folder/],
    use: {
      loader: "file-loader",
      options: {
        name: `[path][name].[ext]`,
        // Output into parent folder's directory
        outputPath: url => url.slice(url.indexOf(`/`) + 1)
      }
    }
  }

Выходной путь занимает url, resourcePath, context в качестве аргумента в таком порядке.

Вы можете удалить части пути с помощью context-option:

...
query: {
  context: path.join(__dirname, 'content'),
...
Другие вопросы по тегам