moira-web

Форк
0
/
webpack.config.js 
158 строк · 5.7 Кб
1
const path = require("path");
2
const webpack = require("webpack");
3
const HtmlWebpackPlugin = require("html-webpack-plugin");
4
const ExtractTextPlugin = require("extract-text-webpack-plugin");
5
const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
6

7
const config = argv => {
8
    const PROD = process.env.NODE_ENV === "production";
9
    const API_MODE = getApiMode(argv);
10
    const config = {
11
        entry: {
12
            app: ["babel-polyfill", "react-hot-loader/patch", "./src/index.js"],
13
        },
14
        output: {
15
            publicPath: "/",
16
            path: path.resolve(__dirname, "dist"),
17
            filename: PROD ? "app.[hash].js" : "app.js",
18
            chunkFilename: PROD ? "app.[id].[hash].js" : "app.[id].js",
19
        },
20
        module: {
21
            rules: [
22
                {
23
                    test: /\.AppRoot\.js$/,
24
                    use: [
25
                        {
26
                            loader: "bundle-loader",
27
                            options: {
28
                                lazy: true,
29
                            },
30
                        },
31
                        "babel-loader",
32
                    ],
33
                    include: path.join(__dirname, "src"),
34
                },
35
                {
36
                    test: /\.(js|jsx)?$/,
37
                    use: [
38
                        {
39
                            loader: "babel-loader",
40
                            options: {
41
                                presets: ["env", "stage-0", "react"],
42
                            },
43
                        },
44
                    ],
45
                    include: /retail\-ui/,
46
                },
47
                {
48
                    test: /\.less$/,
49
                    use: PROD
50
                        ? ExtractTextPlugin.extract({
51
                              fallback: "style-loader",
52
                              use: ["css-loader", "less-loader"],
53
                          })
54
                        : ["style-loader", "css-loader", "less-loader"],
55
                    include: /retail\-ui/,
56
                },
57
                {
58
                    test: /\.js$/,
59
                    use: ["babel-loader"],
60
                    exclude: /node_modules/,
61
                },
62
                {
63
                    test: /\.less$/,
64
                    rules: [
65
                        { use: "classnames-loader" },
66
                        {
67
                            use: PROD
68
                                ? ExtractTextPlugin.extract({
69
                                      fallback: "style-loader",
70
                                      use: [
71
                                          {
72
                                              loader: "css-loader",
73
                                              options: {
74
                                                  modules: true,
75
                                                  localIdentName: "[name]-[local]-[hash:base64:5]",
76
                                              },
77
                                          },
78
                                          "less-loader",
79
                                      ],
80
                                  })
81
                                : [
82
                                      "style-loader",
83
                                      {
84
                                          loader: "css-loader",
85
                                          options: {
86
                                              modules: true,
87
                                              localIdentName: "[name]-[local]-[hash:base64:5]",
88
                                          },
89
                                      },
90
                                      "less-loader",
91
                                  ],
92
                        },
93
                    ],
94
                    exclude: /node_modules/,
95
                },
96
                {
97
                    test: /\.(png|woff|woff2|eot|svg)$/,
98
                    use: "file-loader",
99
                },
100
            ],
101
        },
102
        resolve: {
103
            modules: ["node_modules", "local_modules"],
104
        },
105
        plugins: [
106
            new HtmlWebpackPlugin({
107
                template: "./src/index.html",
108
                favicon: "./src/favicon.ico",
109
                inject: "body",
110
                minify: {
111
                    collapseWhitespace: true,
112
                },
113
            }),
114
            new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/),
115
            new webpack.optimize.CommonsChunkPlugin({
116
                name: "app",
117
                children: true,
118
            }),
119
        ],
120
        devServer: {
121
            host: "0.0.0.0",
122
            disableHostCheck: true,
123
            proxy:
124
                API_MODE === "fake"
125
                    ? {
126
                          "/api": {
127
                              target: "http://localhost:9002",
128
                              pathRewrite: { "^/api": "" },
129
                          },
130
                      }
131
                    : {
132
                          "/api": {
133
                              target: "http://localhost:8081",
134
                              secure: false,
135
                              changeOrigin: true,
136
                          },
137
                      },
138
        },
139
        //devtool: "source-map"
140
    };
141
    if (PROD) {
142
        config.plugins.push(new webpack.optimize.ModuleConcatenationPlugin());
143
        config.plugins.push(new ExtractTextPlugin("app.[hash].css"));
144
        config.plugins.push(new UglifyJSPlugin({ extractComments: { banner: false } }));
145
    }
146
    return config;
147
};
148

149
function getApiMode(argv) {
150
    for (const arg of argv) {
151
        if (arg.startsWith("--env.API=")) {
152
            return arg.substr("--env.API=".length);
153
        }
154
    }
155
    return "real";
156
}
157

158
module.exports = config(process.argv);
159

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.