在 webpack 中保留源文件的文件夹结构

Ahm*_*eza 5 javascript bundle webpack

我有一个 .html 页面(index.html)和一个入口点(index.js),我希望 dist 文件夹保留我的源文件的文件夹结构。

 ./webpack.config.js
 ./src/index/index.html
 ./src/index/index.js
 ./src/index/script1.js
 ./src/index/style1.scss
 ./src/assets/imgs/bg.jpg
Run Code Online (Sandbox Code Playgroud)

我设法编写了一个按我想要的方式工作的 webpack 配置文件,但只有当我使用 'npm run build' 并且 webpack 给我一个最终的构建版本时。如果我使用'npm run dev',那么开发服务器会打开一个显示目录列表的页面。我该如何解决我的问题?这是我的 webpack.config.js

const webpack = require("webpack");
const path = require("path");
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
    mode: 'development',
    optimization: {
        minimize: false
    },
    entry: {'index': './src/index/index.js'},
    output: {
        filename: '[name]/[name].js',
        path: path.resolve(__dirname, './dist')
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            },
            {
                test: /\.css$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                        options: {
                            hmr: process.env.NODE_ENV === 'development',
                            reloadAll: true,
                        },
                    },
                    'css-loader',
                    'postcss-loader'
                ]
            },
            {
                test: /\.scss$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                        options: {
                            hmr: process.env.NODE_ENV === 'development',
                            reloadAll: true,
                        },
                    },
                    'css-loader',
                    'postcss-loader',
                    'sass-loader'
                ]
            },
            {
                test: /\.html$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: 'html-loader',
                        options: {
                            minimize: false,
                            publicPath: './'
                        }
                    }
                ]
            },
            {
                test: /\.(png|jpg|jpeg)$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name].[ext]',
                            outputPath: 'assets/imgs/',
                            publicPath: '../assets/imgs/'
                        }
                    }
                ]
            },
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: "[name]/[name].css",
            chunkFilename: '[id].css',
            ignoreOrder: false
        }),
        new HtmlWebpackPlugin({
            filename: 'index/index.html',
            inject: true,
            chunks: ['index'],
            template: './src/index/index.html'
        }),
        new CleanWebpackPlugin()
    ]
};
Run Code Online (Sandbox Code Playgroud)

包.json :

"scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
    "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
  }
Run Code Online (Sandbox Code Playgroud)

我希望 dist 文件夹是这样的:

./dist/index/index.html
./dist/index/index.js --> final .js bundle
./dist/index/index.css --> final .css bundle 
./dist/assets/imgs/bg.jpg
Run Code Online (Sandbox Code Playgroud)