Webpack dev服务器:定义WWW根目录

klo*_*onq 5 webpack webpack-dev-server

使用webpack我将源文件与分发文件分开.

我遇到的一个问题涉及到output.publicPath,如果我定义一个,生成的index.html有错误的CSS和JS资源路径.我认为问题与extract-text-webpack-pluginSee:https://github.com/webpack-contrib/extract-text-webpack-plugin/issues/246有关

现在我已将代码分离为源代码和分发代码,我index.html可以在http://localhost/target/classes/war.并且每个页面刷新都需要手动输入URL,因为路由无法识别文件夹名称.<base />头部的标签似乎没有效果.

我怎么能指示的WebPack显示文件夹中的内容./target/classes/warhttp://localhost/?(不使用output.publicPath)

为了完整性,请在下面查找整个webpack.config.js内容:

var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var GoogleFontsPlugin = require("google-fonts-webpack-plugin");

module.exports = {

    entry: {
        polyfills: './src/main/webapp/polyfills.ts',
        vendor: './src/main/webapp/vendor.ts',
        app: './src/main/webapp/app/core/global/main/main.ts'
    },

    output: {
        filename: 'target/classes/war/script/[name].[hash].bundle.js'
    },

    resolve: {
        extensions: ['.ts', '.js'],

        alias: {
            css: path.resolve(__dirname, "src/main/webapp/WEB-INF/scss"),
            src: path.resolve(__dirname, "src/main/webapp"),
            dist: path.resolve(__dirname, "target/class/war")
        }
    },

    module: {

        rules: [
            {
                test: /\.ts$/,
                loaders: [
                    {
                        loader: 'awesome-typescript-loader',
                        options: {
                            configFileName: path.resolve(__dirname, "src/main/webapp/WEB-INF/conf/tsconfig.json")
                        }
                    },
                    'angular2-template-loader'
                ]
            },
            {
                test: /\.html$/,
                loader: 'html-loader'
            },
            {
                test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
                loaders: [
                    {
                        loader: "file-loader",
                        options: {
                            hash: "sha512",
                            digest: "hex",
                            name: "/target/classes/war/assets/[name].[hash].[ext]"
                        }
                    }
                ]
            },
            {
                test: /\.(css|scss)$/,
                exclude: path.resolve(__dirname, "src/main/webapp/scss"),
                include: path.resolve(__dirname, "src/main/webapp/app"),
                loaders: [
                    {
                        loader: "raw-loader"
                    },
                    {
                        loader: "sass-loader"
                    }
                ]

            },
            {
                test: /\.(css|scss)$/,
                exclude: path.resolve(__dirname, "src/main/webapp/app"),
                use: [
                    {
                        loader: "style-loader" // creates style nodes from JS strings
                    }, 
                    {
                        loader: "css-loader" // translates CSS into CommonJS
                    },
                    {
                        loader: "resolve-url-loader" // compiles Sass to CSS
                    },
                    {
                        loader: "sass-loader" // compiles Sass to CSS
                    }
                ]
            }
        ]
    },
    plugins: [
        // Workaround for angular/angular#11580
        new webpack.ContextReplacementPlugin(
                // The (\\|\/) piece accounts for path separators in *nix and Windows
                /angular(\\|\/)core(\\|\/)@angular/,
                path.resolve(__dirname, "src/main/webapp"), // location of your src
                {} // a map of your routes
        ),

        new webpack.optimize.CommonsChunkPlugin({
            name: ['app', 'vendor', 'polyfills']
        }),

        new HtmlWebpackPlugin({
            template: 'src/main/webapp/index.html',
            filename: 'target/classes/war/index.html',
            chunksSortMode: function (chunk1, chunk2) {
                var order = ['polyfills', 'vendor', 'app'];
                var order1 = order.indexOf(chunk1.names[0]);
                var order2 = order.indexOf(chunk2.names[0]);
                return order1 - order2;
            }
        }),

        new ExtractTextPlugin({
            filename: "target/classes/war/css/styles.[contenthash].css"
        }),
        new GoogleFontsPlugin({
            fonts: [
                {family: "Lato"}
            ],
            path: "src/main/webapp/scss/fonts/",
            filename: "src/main/webapp/scss/fonts/fonts.css"
        })
    ]
};
Run Code Online (Sandbox Code Playgroud)

klo*_*onq 0

--content-base我找到了提供所需功能的CLI 参数。我不确定如何从 webpack.config.js 配置它,但以下 CLI 正是我想要的:

webpack-dev-server --inline --open --progress --port 80 --content-base /target/classes/war
Run Code Online (Sandbox Code Playgroud)

该站点现在可以通过 http://localhost/ 访问,并从正确的目录提供服务。