• webpack配置


    base

    /* global require, module, __dirname */
    const path = require('path')
    const webpack = require('webpack')
    const ExtractTextPlugin = require('extract-text-webpack-plugin')
    const CopyWebpackPlugin = require('copy-webpack-plugin')
    
    const config = require('../config')
    const projectRoot = path.resolve(__dirname, '../')
    const isProd = process.env.NODE_ENV === 'production'
    
    module.exports = {
        performance: {
            maxEntrypointSize: 300000,
            hints: isProd ? 'warning' : false
        },
        context: path.join(__dirname, '../src'),
        entry: {
            'app': ['./app.js'],
            'admin': ['./admin.js'],
            'vendor': ['vue', 'vue-router', 'vuex-router-sync', 'axios', 'jquery', 'lodash', './assets/js/utils.js', 'nprogress/nprogress.css', 'jsoneditor/dist/jsoneditor.css', 'element-ui/lib/theme-chalk/index.css', 'vue-appui/packages/theme-default/lib/index.css', 'vue-appui/lib/app.css']
        },
        output: {
            path: config.build.assetsRoot,
            publicPath: config.assetsPublicPath,
            filename: 'js/[name].js',
            chunkFilename: 'js/[name].[id].chunk.js'
        },
        resolve: {
            extensions: [
                '.js', '.vue', '.less'
            ],
            modules: [
                path.join(__dirname, '../node_modules'),
            ],
            alias: {
                '~src': path.resolve(__dirname, '../src'),
                '~components': path.resolve(__dirname, '../src/components'),
                '~api': path.resolve(__dirname, '../src/api'),
                '~views': path.resolve(__dirname, '../src/views'),
                '~store': path.resolve(__dirname, '../src/store'),
                '~assets': path.resolve(__dirname, '../src/assets'),
                '~filters': path.resolve(__dirname, '../src/filters'),
                '~directives': path.resolve(__dirname, '../src/directives'),
                'vue': 'vue/dist/vue.common.js'
            }
        },
        resolveLoader: {
            modules: [
                path.join(__dirname, '../node_modules'),
            ]
        },
        module: {
            rules: [
                {
                    test: /.vue$/,
                    loader: 'eslint-loader',
                    enforce: "pre",
                    include: projectRoot,
                    exclude: /node_modules/
                }, {
                    test: /.js$/,
                    loader: 'eslint-loader',
                    enforce: "pre",
                    include: projectRoot,
                    exclude: [/node_modules/, /dist/js/]
                }, {
                    test: /.vue$/,
                    loader: 'vue-loader'
                }, {
                    test: /.js$/,
                    loader: 'babel-loader',
                    include: projectRoot,
                    exclude: /node_modules/
                }, {
                    test: /.json$/,
                    loader: 'json-loader'
                }, {
                    test: /.html$/,
                    loader: 'vue-html-loader'
                }, {
                    test: /.(png|jpe?g|gif|svg)(?.*)?$/,
                    loader: 'url-loader',
                    query: {
                        limit: 10000,
                        name: 'staticimg/[name].[hash:7].[ext]'
                    }
                }, {
                    test: /.(woff2?|eot|ttf|otf)(?.*)?$/,
                    loader: 'url-loader',
                    query: {
                        limit: 10000,
                        name: 'static/fonts/[name].[hash:7].[ext]'
                    }
                },{
                    test: /.css$/,
                    loader: ExtractTextPlugin.extract(['css-loader', 'postcss-loader'])
                },  {
                    test: /.less/,
                    loader: ExtractTextPlugin.extract(['css-loader', 'postcss-loader', 'less-loader'])
                }         
            ]
        },
        plugins: [
            new webpack.ProvidePlugin({'$': 'jquery', 'jQuery': 'jquery', 'window.jQuery': 'jquery', '_': 'lodash'}),
            new CopyWebpackPlugin([{from: '../src/assets/img', to: 'img'}]),
            new webpack.LoaderOptionsPlugin({
                minimize: isProd,
                options: {
                    context: __dirname,
                    vue: {
                            css: ExtractTextPlugin.extract({fallback: 'vue-style-loader', use: 'css-loader'}),
                            less: ExtractTextPlugin.extract({fallback: 'vue-style-loader', use: 'css-loader!less-loader'})
                        }
                }
            }),
        ]
    }

    dev

    /* global require, module */
    const path = require("path")
    const webpack = require('webpack')
    const merge = require('webpack-merge')
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
    const ExtractTextPlugin = require('extract-text-webpack-plugin')
    const config = require('../config')
    const baseWebpackConfig = require('./webpack.base.config')
    
    
    module.exports = merge(baseWebpackConfig, {
        // eval-source-map is faster for development
        devtool: '#cheap-module-eval-source-map',
        plugins: [
            new webpack.DefinePlugin({'process.env': {NODE_ENV: '"development"'} }),
            new FriendlyErrorsPlugin(),
            // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
            new webpack.HotModuleReplacementPlugin(),
            new webpack.NoEmitOnErrorsPlugin(),
            new webpack.optimize.CommonsChunkPlugin({
                names: ["vendor"]
            }),
             new ExtractTextPlugin({
                 filename: 'css/[name].css',
                 allChunks: true
            }),
            // https://github.com/ampedandwired/html-webpack-plugin
            new HtmlWebpackPlugin({
                chunks: [
                    'vendor', 'app',
                ],
                filename: 'index.html',
                template: '../index.html',
                inject: true,
            }),
            new HtmlWebpackPlugin({
                chunks: [
                    'vendor', 'admin',
                ],
                filename: 'admin.html',
                template: '../admin.html',
                inject: true,
            })
        ],
    })

    prod

    /* global require, module, process */
    var path = require("path")
    var webpack = require('webpack')
    var merge = require('webpack-merge')
    var HtmlWebpackPlugin = require('html-webpack-plugin')
    var ExtractTextPlugin = require('extract-text-webpack-plugin')
    var OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
    var config = require('../config')
    var baseWebpackConfig = require('./webpack.base.config')
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
    
    function generateTemplate(title){
        var tpl =  '<!DOCTYPE html>' ;
        return tpl;
    }
    
    module.exports = merge(baseWebpackConfig, {
        output: {
            path: config.build.assetsRoot,
            publicPath: config.assetsPublicPath,
            filename: 'js/[name].[hash].js',
            chunkFilename: 'js/[name].[id].chunk.js'
        },
        devtool: config.build.productionSourceMap ? '#source-map' : false,
        plugins: [
            new webpack.DefinePlugin({
                'process.env': {
                    NODE_ENV: '"production"'
                }
            }),
            new webpack.optimize.CommonsChunkPlugin({
                name: 'vendor'
            }),
            // extract webpack runtime and module manifest to its own file in order to
            // prevent vendor hash from being updated whenever app bundle is updated
            // new webpack.optimize.CommonsChunkPlugin({name: 'manifest', chunks: ['vendor']}),
        
            // new webpack.optimize.OccurenceOrderPlugin(),
            // extract css into its own file
            new ExtractTextPlugin({
                 filename: 'css/[name].[hash].css',
                 allChunks: true
            }),
    
            // new webpack.optimize.UglifyJsPlugin({
            //     compress: {
            //         warnings: false
            //     },
            //     ecma: 8
            // }),
            new UglifyJsPlugin({
                uglifyOptions: {
                  compress: {
                    warnings: false
                  },
                  ecma: 8
                },
                // sourceMap: config.build.productionSourceMap,
                // parallel: true
            }),
            new OptimizeCssAssetsPlugin({
                assetNameRegExp: /.css$/g,
                cssProcessor: require('cssnano'),
                cssProcessorOptions: { 
                    discardComments: {removeAll: true },
                    safe: true
                },
    // 避免 cssnano 重新计算 z-index canPrint:
    true }), // generate dist index.html with correct asset hash for caching. // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ chunks: [ 'vendor', 'app' ], filename: '../../WEB-INF/views/manual.html', templateContent: generateTemplate(''), // 生成的文件放在哪里(相对于output.path的路径) inject: true, minify: { removeComments: true, // collapseWhitespace: true, removeAttributeQuotes: true } }), new HtmlWebpackPlugin({ chunks: [ 'vendor', 'admin' ], hashValue: '[hash]', filename: '../../WEB-INF/views/backend.html', templateContent: generateTemplate(''), inject: true, minify: { removeComments: true, // collapseWhitespace: true, removeAttributeQuotes: true } }) ] })
  • 相关阅读:
    iOS开发日记1-tableview编辑
    nginx安装-del
    linux服务器su之后变成bash-4.1#
    PhoneGap & HTML5 学习资料网址
    PhoneGap通信机制的实现原理
    Android调用Java WebSevice篇之二
    Android调用Java WebSevice篇之一
    Java开发牛人十大必备网站
    百度地图生产工具
    PS制作圆角透明图片
  • 原文地址:https://www.cnblogs.com/natsu07/p/10553210.html
Copyright © 2020-2023  润新知