最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue的webpack2.0升级到webpack4.0解决方案(utils篇)

    正文概述 掘金(泽能)   2021-07-16   841

    由于项目最开始使用了vuecli脚手架搭建项目,webpack版本为2.0。后续由于项目引入插件需要支持webpack4.0。所以有了这次升级篇,我先来看看Vue的webpack

    webpack目录

    • utils.js
    • webpack.dev.js
    • webpack.base.js
    • webpack.prod.js

    utils.js

    附上升级后的utils.js

    将extract-text-webpack-plugin 换成mini-css-extract-plugin

    这里是配置loader的地方,在webpack的rules有加入。如果嫌麻烦可以去掉Vue的这一块。当然这里我是在原来的基础上改造,将mini-css-extract-plugin插件加入数组前面,直接返回loaders。把之前Vue的判断去了。[MiniCssExtractPlugin.loader, cssLoader, postcssLoader]

       function generateLoaders(loader, loaderOptions) {
            const loaders = options.usePostCSS ? [MiniCssExtractPlugin.loader, cssLoader, postcssLoader] : [cssLoader]
    
            if (loader) {
                loaders.push({
                    loader: loader + '-loader',
                    options: Object.assign({}, loaderOptions, {
                        sourceMap: options.sourceMap
                    })
                })
            }
            console.log(loaders, 'lodaers')
    
            return loaders
    
            // Extract CSS when that option is specified
            // (which is the case during production build)
    
            // if (options.extract) {
            //     return ExtractTextPlugin.extract({
            //         use: loaders,
            //         fallback: 'vue-style-loader'
            //     })
            // } else {
            //     return ['vue-style-loader'].concat(loaders)
            // }
        }
    
    'use strict'
    const path = require('path')
    const config = require('../config')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    
    const packageConfig = require('../package.json')
    
    exports.assetsPath = function(_path) {
        const assetsSubDirectory = process.env.NODE_ENV === 'production' ?
            config.build.assetsSubDirectory :
            config.dev.assetsSubDirectory
    
        return path.posix.join(assetsSubDirectory, _path)
    }
    
    exports.cssLoaders = function(options) {
        options = options || {}
    
        const cssLoader = {
            loader: 'css-loader',
            options: {
                sourceMap: options.sourceMap
            }
        }
    
        const postcssLoader = {
            loader: 'postcss-loader',
            options: {
                sourceMap: options.sourceMap
            }
        }
    
    
    
        // generate loader string to be used with extract text plugin
        function generateLoaders(loader, loaderOptions) {
            const loaders = options.usePostCSS ? [MiniCssExtractPlugin.loader, cssLoader, postcssLoader] : [cssLoader]
    
            if (loader) {
                loaders.push({
                    loader: loader + '-loader',
                    options: Object.assign({}, loaderOptions, {
                        sourceMap: options.sourceMap
                    })
                })
            }
            console.log(loaders, 'lodaers')
    
            return loaders
    
            // Extract CSS when that option is specified
            // (which is the case during production build)
    
            // if (options.extract) {
            //     return ExtractTextPlugin.extract({
            //         use: loaders,
            //         fallback: 'vue-style-loader'
            //     })
            // } else {
            //     return ['vue-style-loader'].concat(loaders)
            // }
        }
    
        // https://vue-loader.vuejs.org/en/configurations/extract-css.html
        return {
            css: generateLoaders(),
            postcss: generateLoaders(),
            less: generateLoaders('less'),
            sass: generateLoaders('sass', { indentedSyntax: true }),
            scss: generateLoaders('sass'),
            stylus: generateLoaders('stylus'),
            styl: generateLoaders('stylus')
        }
    }
    
    // Generate loaders for standalone style files (outside of .vue)
    exports.styleLoaders = function(options) {
        const output = []
        const loaders = exports.cssLoaders(options)
    
        for (const extension in loaders) {
            const loader = loaders[extension]
            output.push({
                test: new RegExp('\\.' + extension + '$'),
                use: loader
            })
        }
    
        return output
    }
    
    exports.createNotifierCallback = () => {
        const notifier = require('node-notifier')
    
        return (severity, errors) => {
            if (severity !== 'error') return
    
            const error = errors[0]
            const filename = error.file && error.file.split('!').pop()
    
            notifier.notify({
                title: packageConfig.name,
                message: severity + ': ' + error.name,
                subtitle: filename || '',
                icon: path.join(__dirname, 'logo.png')
            })
        }
    }
    

    至此,关于Utils篇的修改就结束了,有什么问题欢迎反馈质询哦。后续有新的优化也会新增帖子。


    起源地下载网 » Vue的webpack2.0升级到webpack4.0解决方案(utils篇)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元