深圳建设个网站,服务器租用哪家好而且便宜,企业网站在线留言,出口外贸交易平台vue-cli中的webpack的config配置详细说明打开我们的vue项目文件夹我们可以清楚的看到文件夹下的三个文件#xff0c;
“dev.env.js”#xff0c;“index.js”#xff0c;“prod.env.js”#xff0c;
我们先打开prod.env.js的文件#xff0c;看里面的内容#xff1a;‘use…vue-cli中的webpack的config配置详细说明打开我们的vue项目文件夹我们可以清楚的看到文件夹下的三个文件
“dev.env.js”“index.js”“prod.env.js”
我们先打开prod.env.js的文件看里面的内容‘use strict’
module.exports {
NODE_ENV: ‘“production”’
}
prod.env.js的内容非常简单仅仅是导出了一个对象
里面写明了执行环境是“production生产环境”
接下来看与之对应的“dev.env.js”文件
‘use strict’
//引入webpack-merge模块
const merge require(‘webpack-merge’)
//引入刚才打开的prod.env.js
const prodEnv require(’./prod.env’)module.exports merge(prodEnv, {
NODE_ENV: ‘“development”’
})在“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一定要加双引号不然会报错c开头引入了node中的path模块然后我们先来看dev下的配置内容assetsSubDirectory指的是**静态资源文件夹默认“static”**assetsPublicPath指的是**发布路径**proxyTable是我们常用来**配置代理API的地方**后面的host和port相信大家都知道我就不细说了autoOpenBrowser是否自动打开浏览器errorOverlay查询错误notifyOnErrors通知错误poll是跟devserver相关的一个配置webpack为我们提供的devserver是可以监控文件改动的但在有些情况下却不能工作我们可以设置一个轮询poll来解决useEslint是否使用eslintshowEslintErrorsInOverlay是否展示eslint的错误提示devtool webpack提供的用来方便调试的配置它有四种模式可以查看webpack文档了解更多cacheBusting 一个配合devtool的配置当给文件名插入新的hash导致清楚缓存时是否生成souce maps默认在开发环境下为truecssSourceMap 是否开启cssSourceMap我们再来看build下的配置内容:index 编译后index.html的路径path.resolve(__dirname, ‘…/dist’)中path.resolve(__dirname指的是index.js所在的绝对路径再去找“…/dist”这个路径node相关的知识assetsRoot打包后的文件根路径
至于assetsSubDirectory和assetsPublicPath跟dev中的一样productionSourceMap是否开启source-mapdevtool同devproductionGzip是否压缩productionGzipExtensions gzip模式下需要压缩的文件的扩展名设置后会对相应扩展名的文件进行压缩bundleAnalyzerReport 是否开启打包后的分析报告
这个是配置
//config目录下index.js配置文件
// see http://vuejs-templates.github.io/webpack for documentation.
// path是node.js的路径模块用来处理路径统一的问题
var path require(path)module.exports {// 下面是build也就是生产编译环境下的一些配置build: {// 导入prod.env.js配置文件只要用来指定当前环境详细见(1)env: require(./prod.env),// 下面是相对路径的拼接假如当前跟目录是config那么下面配置的index属性的属性值就是dist/index.htmlindex: path.resolve(__dirname, ../dist/index.html),// 下面定义的是静态资源的根目录 也就是dist目录assetsRoot: path.resolve(__dirname, ../dist),// 下面定义的是静态资源根目录的子目录static也就是dist目录下面的staticassetsSubDirectory: static,// 下面定义的是静态资源的公开路径也就是真正的引用路径assetsPublicPath: /,// 下面定义是否生成生产环境的sourcmapsourcmap是用来debug编译后文件的通过映射到编译前文件来实现productionSourceMap: true,// Gzip off by default as many popular static hosts such as// Surge or Netlify already gzip all static assets for you.// Before setting to true, make sure to:// npm install --save-dev compression-webpack-plugin// 下面是是否在生产环境中压缩代码如果要压缩必须安装compression-webpack-pluginproductionGzip: false,// 下面定义要压缩哪些类型的文件productionGzipExtensions: [js, css],// Run the build command with an extra argument to// View the bundle analyzer report after build finishes:// npm run build --report// Set to true or false to always turn it on or off// 下面是用来开启编译完成后的报告可以通过设置值为true和false来开启或关闭// 下面的process.env.npm_config_report表示定义的一个npm_config_report环境变量可以自行设置bundleAnalyzerReport: process.env.npm_config_report},dev: {// 引入当前目录下的dev.env.js用来指明开发环境详见(2)env: require(./dev.env),// 下面是dev-server的端口号可以自行更改port: 8080,// 下面表示是否自定代开浏览器autoOpenBrowser: true,assetsSubDirectory: static,assetsPublicPath: /,// 下面是代理表作用是用来建一个虚拟api服务器用来代理本机的请求只能用于开发模式// 详见(3)proxyTable: {},// CSS Sourcemaps off by default because relative paths are buggy// with this option, according to the CSS-Loader README// (https://github.com/webpack/css-loader#sourcemaps)// In our experience, they generally work as expected,// just be aware of this issue when enabling this option.// 是否生成cssmap文件上面这段英文就是说使用这个cssmap可能存在问题但是按照经验问题不大可以使用// 给人觉得没必要用这个css出了问题直接控制台不就完事了cssSourceMap: false}
}
(1)下面是prod.env.js的配置内容module.exports {// 作用很明显就是导出一个对象NODE_ENV是一个环境变量指定production环境NODE_ENV: production}
(2)下面是dev.env.js的配置内容// 首先引入的是webpack的merge插件该插件是用来合并对象也就是配置文件用的相同的选项会被覆盖var merge require(webpack-merge)// 导入prod.env.js配置文件var prodEnv require(./prod.env)// 将两个配置对象合并最终结果是 NODE_ENV: developmentmodule.exports merge(prodEnv, {NODE_ENV: development})
(3)下面是proxyTable的一般用法vue-cli使用这个功能是借助http-proxy-middleware插件一般解决跨域请求apiproxyTable: {/list: {target: http://api.xxxxxxxx.com, - 目标url地址changeOrigin: true, - 指示是否跨域pathRewrite: {^/list: /list - 可以使用 /list 等价于 api.xxxxxxxx.com/list}}}