案例项目目录:constfs=require("fs");//操作本地文件,多用于构建多项目,importconstpath=require("path");constCopyWebpackPlugin=require("copy-webpack-plugin");//复制静态文件,按需导入constCompressionPlugin=require('compression-webpack-plugin');//启用gzip压缩,根据需要导入constproductionGzipExtensions=/\\.(js|css|json|txt|html|ico|svg)(\\?.\*)?$/i;//启用gzip压缩,按需写入letpagesMap={};//letNODE=process.env.NODE_ENV;letSITE=process.env.VUE_APP_SITE||"production";constresolve=dir=>{returnpath.join(__dirname,dir);};if(SITE==="htmls"){multipageFn();}elseif(SITE==="web"){singlepageFn();}elseif(SITE==="manager"){singlepageFn("manager");}/***多页项目(示例1)*entry:"",template:"",filename:““ETC。;**/functionmultipageFn(){letfilesList=resolve(`./src/views/${SITE}`);if(fs.existsSync(filesList)){letfiles=fs.readdirSync(filesList);files.forEach(name=>{pagesMap[name]={entry:`./src/views/${SITE}/${name}/main.js`,//入口文件,路径根据实际情况模板:`./src/views/${SITE}/${name}/index.html`,文件名:`${name}.html`,标题:process.env.VUE_APP_TITLE||SITE//页面标题};});}}/***单页页面项(示例2)**/functionsinglepageFn(path='index'){pagesMap={index:{entry:`./src/views/${SITE}/main.js`,//入口文件,路径视实际情况而定title}};}module.exports={//配置webpack-dev-server行为devServer:{open:false,//告诉dev-server在server启动后打开浏览器boolean=falsestringobjectport:8080,//指定端口号host:"0.0.0.0",//指定hostusehttps:false,//默认情况下,dev-server将通过HTTP服务hotOnly:false,//启用模块热替换proxy:{//也可以配置多个跨域//代理跨域"/api":{target:"XXXXXXX",//代理接口地址changeOrigin:true,secure:false,pathRewrite:{"^/api":""}}}},assetsDir:"static",//存储打包好的fileFolderpublicPath:"/",//string='/'浏览器默认打包文件会在这个路径下(旧版本baseUrl:"",)outputDir:`dist/${SITE}`,//输出filedirectorylintOnSave:false,//eslint-loader在保存时是否检查filenameHashing:true,//默认生成的静态资源文件名中包含hash来控制缓存productionSourceMap:false,//是否生成对应的map文件(未压缩的加密代码),设置为false可以加快生产环境搭建速度//如果需要根据环境有条件地配置行为,或者想直接修改配置,那就换成一个函数(这个函数会被在环境变量Lazyexecutionaftersetting)。此方法的第一个参数将接收已解析的配置。函数中可以直接修改配置,也可以返回一个要合并的对象'vue-router':'VueRouter',"element-ui":"Element"},plugins:[newCopyWebpackPlugin({//打包时执行拷贝模式:[{from:"./static",//statictocopyFileresourceto:'static'}]}),//压缩newCompressionWebpackPlugin({filename:"[path].gz[query]",algorithm:"gzip",test:productionGzipExtensions,threshold:10240,minRatio:0.8})]},//webpack配置//参见https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.mdchainWebpack:()=>{//对于内部webpack配置(比如asModify,addLoaderoption)(chainoperation)},css:{//css处理//是否将组件中的CSS提取到单独的CSS文件中,构建为库时,也可以设置为false防止用户自己导入CSS//default在生产环境为true,在开发环境为falseextract:true,sourceMap:false,//csssourcemap是否开启(为true后可能会影响构建的性能)loaderOptions:{//将选项传递给CSS相关的加载器(支持css-loaderpostcss-loadersass-loaderless-loaderstylus-loader)css:{},less:{},postcss:{plugins:SITE!=="manager"?[require('postcss-px2rem-exclude')({//将px单位转换为rem单位rootValue:75,//转换基础(设计图750的根字体为75)//selectorBlackList:['weui','mu'],//忽略转换正则匹配项propList:["*"]})]:[]}}},//pages:{//构建多页应用,页面配置//index:{//entry:"./src/index/main.js",//入口文件//template:"./src/index/index.hrml",//templatefile//filename:"index.html",//输出文件名////使用title选项时,模板中的title标签需要为
