一泥耀、babel-plugin-transform-remove-console
1.先下載
npm install babel-plugin-transform-remove-console --save-dev
2. 在 babel.consig.js 中配置
if (process.env.NODE_ENV === "production" || process.env.NODE_ENV === "sit") {
plugins.push("transform-remove-console");
}
二谱姓、terser-webpack-plugin
1.先下載
npm install terser-webpack-plugin --save-dev
2. vue.config.js 中引入
const TerserPlugin = require("terser-webpack-plugin");
config.plugins.push(
//去掉打包之后的打印
new TerserPlugin({
terserOptions: {
ecma: undefined,
warnings: false,
parse: {},
compress: {
drop_console: true,
drop_debugger: false,
pure_funcs: ["console.log"], // 移除console
},
},
})
);
3.完整版 vue.config.js
const TerserPlugin = require("terser-webpack-plugin");
// const CompressionWebpackPlugin = require('compression-webpack-plugin');
// const productionGzipExtensions = ['js', 'css'];
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
module.exports = {
// 基本路徑
publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
// 輸出文件目錄
outputDir: "dist", // 默認(rèn)dist
// 用于嵌套生成的靜態(tài)資產(chǎn)(js,css,img,fonts)目錄
// assetsDir: '',
// 指定生成的 index.html 的輸出路徑 (相對(duì)于 outputDir)。也可以是一個(gè)絕對(duì)路徑
indexPath: "index.html", // Default: 'index.html'
filenameHashing: true,
// 構(gòu)建多頁(yè)時(shí)使用
pages: undefined,
// eslint-loader是否在保存的時(shí)候檢查
lintOnSave: false,
// 是否使用包含運(yùn)行時(shí)編譯器的Vue核心的構(gòu)建
runtimeCompiler: false,
// 默認(rèn)情況下 babel-loader 會(huì)忽略所有 node_modules 中的文件叹誉。如果你想要通過(guò) Babel 顯式轉(zhuǎn)譯一個(gè)依賴,可以在這個(gè)選項(xiàng)中列出來(lái)
transpileDependencies: [],
// 如果你不需要生產(chǎn)環(huán)境的 source map,可以將其設(shè)置為 false 以加速生產(chǎn)環(huán)境構(gòu)建扁藕。
productionSourceMap: false,
// 如果這個(gè)值是一個(gè)對(duì)象,則會(huì)通過(guò) webpack-merge 合并到最終的配置中疚脐。如果這個(gè)值是一個(gè)函數(shù)亿柑,則會(huì)接收被解析的配置作為參數(shù)。該函數(shù)及可以修改配置并不返回任何東西棍弄,也可以返回一個(gè)被克隆或合并過(guò)的配置版本望薄。
configureWebpack: (config) => {
if (process.env.NODE_ENV === "production") {
// 為生產(chǎn)環(huán)境修改配置...
// const plugins = []
// plugins.push(
// new CompressionWebpackPlugin({
// filename: '[path].gz[query]',
// algorithm: 'gzip',
// test: productionGzipExtensions,
// threshold: 10240,
// minRatio: 0.8
// })
// )
// config.plugins = [...config.plugins, ...plugins]
config.plugins.push(
//去掉打包之后的打印
new TerserPlugin({
terserOptions: {
ecma: undefined,
warnings: false,
parse: {},
compress: {
drop_console: true,
drop_debugger: false,
pure_funcs: ["console.log"], // 移除console
},
},
})
);
} else {
// 為開(kāi)發(fā)環(huán)境修改配置...
}
},
// 是一個(gè)函數(shù)疟游,會(huì)接收一個(gè)基于 webpack-chain 的 ChainableConfig 實(shí)例。允許對(duì)內(nèi)部的 webpack 配置進(jìn)行更細(xì)粒度的修改痕支。
chainWebpack: (config) => {
config.module
.rule("images")
.use("image-webpack-loader")
.loader("image-webpack-loader")
.options({ bypassOnDebug: true })
.end();
/*config.module
.rule('images')
.use('url-loader')
.loader('url-loader')
.tap(options => {
// 修改它的選項(xiàng)...
return options
})*/
},
// css相關(guān)配置
css: {
// 啟用 CSS modules
requireModuleExtension: false,
// 是否使用css分離插件
extract: false,
// 開(kāi)啟 CSS source maps?
sourceMap: false,
// css預(yù)設(shè)器配置項(xiàng)
loaderOptions: {
sass: { prependData: `@import "@/assets/css/reset.scss";` },
},
},
// webpack-dev-server 相關(guān)配置
devServer: {
host: "0.0.0.0",
port: 8080,
https: false,
open: true,
hotOnly: false,
proxy: null, // 設(shè)置代理
disableHostCheck: true, // 禁用webpack熱重載檢查 解決熱更新失效問(wèn)題
before: (app) => {},
},
// PWA 插件相關(guān)配置
pwa: {},
// 第三方插件配置
pluginOptions: {
// ...
},
};