vuecli3打包时开启了productionSourceMap为true却没有生成sourcemap文件?

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vuecli3打包时开启了productionSourceMap为true却没有生成sourcemap文件?相关的知识,希望对你有一定的参考价值。

问题

今天我在开启的时候发现 vuecli3 打包时开启了 productionSourceMap 为 true 却没有生成 sourcemap 文件?

我的 vue.config.js 的配置如下:

const UglifyJsPlugin = require("uglifyjs-webpack-plugin");

module.exports = 
    publicPath: process.env.NODE_ENV === "production" ? "/kaimo/" : "/kaimo",
    // 将构建好的文件输出到哪里
    outputDir: "kaimo",
    pages: 
        index: 
            entry: "src/main.js",
            template: "src/tpl.html",
            filename: "index.html",
            title: "测试页面",
            chunks: ["chunk-vendors", "chunk-common", "index"]
        ,
    ,
    // 生产环境下的sourceMap
    productionSourceMap: true,
    chainWebpack: config => 
        if (process.env.NODE_ENV === "production") 
            config.externals(
                "vue": "Vue",
                "vue-router": "VueRouter"
            );
        
    ,
    configureWebpack: config => 
        if (process.env.NODE_ENV === "production") 
            config.optimization.minimizer = [
                new UglifyJsPlugin(
                    uglifyOptions: 
                        output: 
                            comments: true, // 删除注释
                        ,
                        warnings: false,
                        compress: 
                            drop_console: true,
                            drop_debugger: true, // 删除debugger
                            pure_funcs: ["console.log"],
                        
                    
                )
            ];
        
    
;

设置 productionSourceMap: true 打包之后:并没有发现生成 sourcemap 文件

原因以及解决方式

定位导致的问题,我把一些优化的配置注释掉

// const UglifyJsPlugin = require("uglifyjs-webpack-plugin");

module.exports = 
    publicPath: process.env.NODE_ENV === "production" ? "/kaimo/" : "/kaimo",
    // 将构建好的文件输出到哪里
    outputDir: "kaimo",
    pages: 
        index: 
            entry: "src/main.js",
            template: "src/tpl.html",
            filename: "index.html",
            title: "测试页面",
            chunks: ["chunk-vendors", "chunk-common", "index"]
        ,
    ,
    // 生产环境下的sourceMap
    productionSourceMap: true,
    chainWebpack: config => 
        if (process.env.NODE_ENV === "production") 
            config.externals(
                "vue": "Vue",
                "vue-router": "VueRouter"
            );
        
    ,
    configureWebpack: config => 
        if (process.env.NODE_ENV === "production") 
            // config.optimization.minimizer = [
            //     new UglifyJsPlugin(
            //         uglifyOptions: 
            //             output: 
            //                 comments: true, // 删除注释
            //             ,
            //             warnings: false,
            //             compress: 
            //                 drop_console: true,
            //                 drop_debugger: true, // 删除debugger
            //                 pure_funcs: ["console.log"],
            //             
            //         
            //     )
            // ];
        
    
;

注释之后,打包发现生成了

所以导致生成不了的原因就是 uglifyjs-webpack-plugin 插件导致,这里我用的是 "uglifyjs-webpack-plugin": "^2.2.0", 如果我们需要使用 uglifyjs-webpack-plugin 优化代码,那么怎么解决这个问题?

我们可以打开 https://www.npmjs.com/package/uglifyjs-webpack-plugin,找到 sourceMap 配置项,可以看到这个默认是 false 的,如果要生成就需要开启。

所以我们开启 uglifyjs-webpack-plugin 插件的 sourceMap 配置项为 true

const UglifyJsPlugin = require("uglifyjs-webpack-plugin");

module.exports = 
    publicPath: process.env.NODE_ENV === "production" ? "/kaimo/" : "/kaimo",
    // 将构建好的文件输出到哪里
    outputDir: "kaimo",
    pages: 
        index: 
            entry: "src/main.js",
            template: "src/tpl.html",
            filename: "index.html",
            title: "测试页面",
            chunks: ["chunk-vendors", "chunk-common", "index"]
        ,
    ,
    // 生产环境下的sourceMap
    productionSourceMap: true,
    chainWebpack: config => 
        if (process.env.NODE_ENV === "production") 
            config.externals(
                "vue": "Vue",
                "vue-router": "VueRouter"
            );
        
    ,
    configureWebpack: config => 
        if (process.env.NODE_ENV === "production") 
            config.optimization.minimizer = [
                new UglifyJsPlugin(
                    sourceMap: true,
                    uglifyOptions: 
                        output: 
                            comments: true, // 删除注释
                        ,
                        warnings: false,
                        compress: 
                            drop_console: true,
                            drop_debugger: true, // 删除debugger
                            pure_funcs: ["console.log"],
                        
                    
                )
            ];
        
    
;

这样我们就能正常生成了sourcemap文件了。

以上是关于vuecli3打包时开启了productionSourceMap为true却没有生成sourcemap文件?的主要内容,如果未能解决你的问题,请参考以下文章

VueCLI3打包优化--抽离依赖包

如何手写一个 webpack 插件:实现 vuecli3 打包时生成一个 git 分支版本信息的文件?

vue-cli3打包之后的文件为何不能本地打开

vuecli3项目打包优化配置要点

Vue-cli打包后部署到子目录下的路径问题说明

VUE vue-cli3配置打包后的文件加上版本号