| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /* eslint-disable no-undef */
- const webpack = require('webpack');
- const { merge } = require("webpack-merge");
- const path = require("path");
- const common = require("./webpack.common.js");
- const CompressionPlugin = require("compression-webpack-plugin");
- const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); // js压缩插件
- const MiniCssExtractPlugin = require("mini-css-extract-plugin");
- const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
- // const DllReferencePlugin = require('webpack/lib/DllReferencePlugin');
- const fs = require('fs');
- const lessToJs = require('less-vars-to-js');
- const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
- const CopyWebpackPlugin = require('copy-webpack-plugin')
- //转换 less 变量,用于主题
- const baseLess = lessToJs(fs.readFileSync(path.join(__dirname, '../src/themes/themes.less'), 'utf8'));
- let themers = {};
- Object.keys(baseLess).map((k, i) => {
- let key = String(k).replace(/@/g, "");
- themers[key] = String(baseLess[k]);
- });
- const lessVars = Object.assign(themers, { "@CDN_BASE": "" });
- const lessExclude = /(node_modules)|(App)/;
- module.exports = merge(common, {
- mode: "production",
- module: {
- rules: [
- {
- test: /\.less$/,
- exclude: lessExclude,
- use: [
- MiniCssExtractPlugin.loader,
- {
- loader: "css-loader",
- options: {
- importLoaders: 1,
- modules: {
- localIdentName: "[local]___[hash:base64:5]"
- }
- },
- },
- {
- loader: "less-loader",
- options: {
- modifyVars: lessVars,
- javascriptEnabled: true
- }
- }
- ],
- },
- {
- test: /\.less$/,
- include: lessExclude,
- use: [
- MiniCssExtractPlugin.loader,
- "css-loader",
- {
- loader: "less-loader",
- options: {
- modifyVars: lessVars,
- javascriptEnabled: true
- }
- }
- ],
- },
- {
- test: /\.css$/,
- use: [
- MiniCssExtractPlugin.loader,
- 'css-loader',
- ],
- exclude: /(node_modules)/
- },
- // style
- {
- test: /\.css$/,
- use: [
- MiniCssExtractPlugin.loader,
- 'css-loader'],
- exclude: /(src)/
- },
- {
- test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
- loader: "file-loader"
- },
- {
- test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
- use: ['url-loader?limit=10000&mimetype=images/svg+xml']
- },
- {
- test: /\.(less|css)$/,
- use: ['style-loader', 'css-loader'],
- include: [
- path.resolve(__dirname, './node_modules/monaco-editor/'),
- path.resolve(__dirname, './node_modules/bravo-editor/'),
- ]
- },
- ]
- },
- optimization: {
- minimizer: [
- new UglifyJsPlugin({
- cache: true,
- parallel: true,
- sourceMap: true // set to true if you want JS source maps
- }),
- new OptimizeCSSAssetsPlugin({})
- ]
- },
- plugins: [
- new MiniCssExtractPlugin({
- filename: "static/css/[name].[contenthash].css",
- chunkFilename: "static/css/[id].[contenthash].css",
- ignoreOrder: true
- }),
- // gzip压缩插件
- new CompressionPlugin({
- filename: '[path].gz[query]', //目标资源名称。[file] 会被替换成原资源。[path] 会被替换成原资源路径,[query] 替换成原查询字符串
- algorithm: 'gzip',//算法
- test: new RegExp(
- '\\.(js|css)$' //压缩 js 与 css
- ),
- threshold: 10240,//只处理比这个值大的资源。按字节计算
- minRatio: 0.8//只有压缩率比这个值小的资源才会被处理
- }),
- new webpack.DllReferencePlugin({
- manifest: require(path.resolve(__dirname, '../dist/manifest.json')),
- }),
- new webpack.DefinePlugin({
- 'process.env.APP_ENV': JSON.stringify(process.env.APP_ENV),
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
-
- }),
- new CopyWebpackPlugin([
- {
- from: path.resolve(__dirname, '../src/assets/js/privateConfig.js'),
- to:path.resolve(__dirname, '../dist/static/privateConfig.js'),
- // to: '../dist/static/privateConfig.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/js/privateConfig.js'),
- to:path.resolve(__dirname, '../dist/static/privateConfig.js'),
- // to: '../dist/static/privateConfig.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/js/jquery-1.11.0.min.js'),
- to:path.resolve(__dirname, '../dist/static/jquery-1.11.0.min.js'),
- // to: '../dist/static/crypto-js.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/js/jquery.numscroll.js'),
- to:path.resolve(__dirname, '../dist/static/jquery.numscroll.js'),
- // to: '../dist/static/crypto-js.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/js/echarts.all.js'),
- to:path.resolve(__dirname, '../dist/static/echarts.all.js'),
- // to: '../dist/static/crypto-js.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/js/echarts.min.js'),
- to:path.resolve(__dirname, '../dist/static/echarts.min.js'),
- // to: '../dist/static/crypto-js.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/fonts/DingTalkJinBuTi.ttf'),
- to:path.resolve(__dirname, '../dist/static/DingTalkJinBuTi.ttf'),
- // to: '../dist/static/crypto-js.js'
- },
- {
- from: path.resolve(__dirname, '../src/assets/fonts/DingTalkSans.ttf'),
- to:path.resolve(__dirname, '../dist/static/DingTalkSans.ttf'),
- // to: '../dist/static/crypto-js.js'
- },
- ]),
- new MonacoWebpackPlugin()
- ],
- });
|