文件目录
index.js
dev.env.js
prod.env.js
index.js 配置注释
"use strict";
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require("path");
module.exports = {
configureWebpack: config => {
if (process.env.NODE_ENV === "production") {
config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
}
},
dev: {
// Paths
assetsSubDirectory: "static", //指的是静态资源文件夹,默认“static”,
assetsPublicPath: "/",//指的是发布路径,
//是我们常用来配置代理API的地方,
proxyTable: {
"/api": {
target: "http://localhost:8088",
changeOrigin: true,
pathRewrite: {
"^/api": "/"
}
}
},
// 各种开发服务器设置
host: "192.168.XXX.XXX", // 可以被 process.env.HOST 覆盖
port: 8088, // 可以通过 process.env.PORT 覆盖,如果端口正在使用,将确定一个空闲的
autoOpenBrowser: false, //自动打开默认浏览器
errorOverlay: true, //查询错误
notifyOnErrors: true, //通知错误
//poll是跟devserver相关的一个配置,webpack为我们提供的devserver是可以监控文件改动的,但在有些情况下却不能工作,我们可以设置一个轮询(poll)来解决
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// useEslint是否使用eslint
// showEslintErrorsInOverlay是否展示eslint的错误提示
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: "cheap-module-eval-source-map", //webpack提供的用来方便调试的配置,它有四种模式,可以查看webpack文档了解更多
// 如果你在 devtools 中调试 vue 文件有问题,
// 将此设置为 false - 它*可能*有帮助
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,//一个配合devtool的配置,当给文件名插入新的hash导致清楚缓存时是否生成souce maps,默认在开发环境下为true
cssSourceMap: true //是否开启cssSourceMap
},
build: {
// index.html 的模板
//编译后index.html的路径,path.resolve(__dirname, '../dist')中
// path.resolve(__dirname)指的是index.js所在的绝对路径,再去找“../dist”这个路径(node相关的知识)
index: path.resolve(__dirname, "../dist/index.html"),
// Paths
assetsRoot: path.resolve(__dirname, "../dist"),
assetsSubDirectory: "static", //指的是静态资源文件夹,默认“static”,
assetsPublicPath: "./",//指的是发布路径,
/**
* Source Maps
*/
productionSourceMap: false, //禁止打包后生成.map文件 --可以防止生产环境源码的暴露 减小打包后文件体积
// https://webpack.js.org/configuration/devtool/#production
devtool: "#source-map",
// 默认情况下 Gzip 关闭许多流行的静态主机,例如
// Surge 或 Netlify 已经为您压缩了所有静态资产。
// 在设置为 `true` 之前,请确保:
// 如果按上述操作完成后,打包时出错,建议更换低版本的compression-webpack-plugin,推荐使用1.1.12或者1.1.11版本等
// npm uninstall --save-dev compression-webpack-plugin
//npm install --save-dev compression-webpack-plugin@1.1.12
productionGzip: true,//是否压缩
productionGzipExtensions: ["js", "css"],//gzip模式下需要压缩的文件的扩展名,设置后会对相应扩展名的文件进行压缩
// 运行带有额外参数的构建命令
// 在构建完成后查看包分析器报告:
// `npm run build --report`
// 设置为 `true` 或 `false` 以始终打开或关闭它
// 是否开启打包后的分析报告
bundleAnalyzerReport: process.env.npm_config_report
}
};
dev.env.js注释
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
//在“dev.env.js”中,先引入了webpack-merge这个模块。这个模块的作用是来合并两个配置文件对象并生成一个新的配置文件,有点儿类似于es6的object.assign();
// vue-cli中将一些通用的配置抽出来放在一个文件内,在对不同的环境配置不同的代码,最后使用webpack-merge来进行合并,减少重复代码,正如文档中所说,“webpack遵循不重复原则(Don't repeat yourself - DRY),不会再不同的环境中配置相同的代码”
// 当然,关于webpack-merge的内容还远不止这些,想了解更多关于这个模块的朋友请访问 https://www.npmjs.com/package/webpack-merge
// 好,让我们接着回到代码中来,引入webpack-merge后这个文件又引入了prod.env.js,接着就将prod.env.js的配置和新的配置,即指明开发环境(development)进行了merge。(我有点儿不太理解为什么要这样做,如果不merge直接写module.exports={NODE_ENV:'"development'}也是可以的,难道是为了优雅降级?)
// 还有一点需要注意是的,development和production一定要加双引号,不然会报错!!!
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
prod.env.js 注释
'use strict'
module.exports = {
NODE_ENV: '"production"'
}