Webpack 4 - сохранить структуру папок для пакетов

Я не могу сохранить структуру папок для своих выходных пакетов.

Я пытался использовать [path] заполнитель, но это не сработало. Существует аналогичная тема , но она не отвечает на мой вопрос.

Я использую: Webpack 4.28.4 и Node v10.15.0.

Структура входной папки:

src
|  
+-- blog
|  |
|  +-- index.js
|  
+-- index.js

веб-пакет.config.js:

  entry: {
    main: './src/index.js',
    blog: './src/blog/index.js'
  },
  output: {
    filename: '[path][name].[contenthash].js',
    path: path.resolve(__dirname, 'dist')
  },

На выходе я получил:

dist
|  
+-- [path]blog.c63bf8952b90c5e5ba3e.js
|  
+-- [path]main.9ad0ffac44f9e88f76ce.js

Но я ожидаю:

dist
|  
+-- blog
|  |
|  +-- blog.c63bf8952b90c5e5ba3e.js
|  
+-- main.9ad0ffac44f9e88f76ce.js

Примечание. Я использовал заполнитель [name] для идентификации файлов, но в конце концов я его удалю.


person Jaroslaw Bagnicki    schedule 27.01.2019    source источник


Ответы (2)


Для тех, кто ищет решение

Только один, который я нашел, использует путь в качестве имени записи (возможно, существует какой-то плагин). как в ответе выше.

Я сделал простое преобразование массива, которое позволяет мне преобразовать путь к записям.

const entries = [
    "admin/ts/form.ts",
    "path/to/some/file.ts"
].reduce((acc, path) => {
    const key =
        path.split("/")
        .map(part => part === "ts" ? "js" : part)
        .join("/")
        .replace(/.ts|.tsx$/, "")
    return {
        ...acc,
        [key]: "./static_src/" + path
    }
}, {})

console.log(entries)

и теперь в конфигурации вашего веб-пакета вы можете:

module.exports = {
    mode: 'production',
    entry: entries,
    output:{
        path: path.resolve(__dirname, 'static_compiled'),
        filename: "[name].js"
    },
    ...
}
person Robert    schedule 03.02.2021
comment
Спасибо! Это ОЧЕНЬ помогло мне, когда я не хотел связывать и сохранять структуру папок. - person b4rtekb; 10.07.2021

Если вы измените name своего входного фрагмента на путь в выходном каталоге, который вы хотели бы видеть при выводе, это поможет вам.

Например, если вы переименовали свою запись в блоге на blog/blog, как показано ниже, когда веб-пакет генерирует пакет и выводит его в выходной каталог, поскольку имя файла blog/blog, результатом будет dist/blog/blog.[contenthash].js. Другой файл по-прежнему будет main.[contenthash].js.

Это должно помочь вам:

 `entry: {
    main: './src/index.js',
    'blog/blog': './src/blog/index.js'
  },
  output: {
    filename: '[name].[contenthash].js',
    path: path.resolve(__dirname, 'dist')
  }`
person pckessel    schedule 27.04.2020