一直以来都在为项目中webpack,焦头烂额,官网的文档也看过几遍,项目也扒拉扒拉几个看过,收获甚微。
单停止扒拉扒拉却从未停止。
使用webpack-merge区分生成环境和开发环境。将配置拆分简化

  • 很多时候,我们都需要针对不同的环境进行不用的操作。

  • 比如在生成环境下分离css到单独文件:

var extractSass = new ExtractTextPlugin({filename: "[name].[contenthash].css",disable: process.env.NODE_ENV === "development"
});

在生成环境下要压缩代码:

new UglifyJSPlugin();
  • 在开发环境下使用代理
devServer:{proxy: {'api': {target: 'http://api.douban.com/v2/movie/',secure: false,changeOrigin: true}}

通常会用process.env.NODE_ENV === “development”,并且在package.json中设置环境变量来进行判断,不过当文件大了或者页面需要判断的地方多了之后,配置文件就会充斥着大量三元表达式

可以考虑用webpack-merge将配置文件拆分为3个文件,一个是webpack.common.js,即不管是生产环境还是开发环境都会用到的部分,以及webpack.product.js和webpack.dev.js, 并且使用webpack-merge来合并对象

common.js

 //webpack.common.jsvar path = require('path');var HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {entry: {app: './src/index.js'},output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules:[{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader'}},]           },plugins: [new HtmlWebpackPlugin({title: 'test'})],}

dev.js

//开发环境webpack.dev.js
var merge = require('webpack-merge');
var common = require('./webpack.common.js');module.exports = merge(common, {module:{rules:[{test: /\.css$/,use:["style-loader","css-loader"]}]      },devtool: 'inline-source-map',devServer:{open:true,  hot: true, proxy: {'/api/': {target: 'http://baidu.com',secure: false,changeOrigin: true}}      },
})

product.js

//生产环境webpack.product.js
var merge = require('webpack-merge');
var UglifyJSPlugin = require('uglifyjs-webpack-plugin');
var common = require('./webpack.common.js');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var cleanPlugin = require("clean-webpack-plugin");
var extractSass = new ExtractTextPlugin({filename: "[name].[contenthash].css",
});module.exports = merge(common, {module: {rules: [{test: /\.css$/,use: extractSass.extract({use: [{loader: "css-loader"}, ],fallback: "style-loader"})}]},devtool: 'source-map',plugins: [new cleanPlugin(["dist"]),new UglifyJSPlugin(),extractSass,]
});

在packjson中修改webpack默认配置文件

"scripts": {"dev": "webpack-dev-server --config webpack.dev.js","build": "webpack --config webpack.product.js"
}

通过npm run dev以及npm run build来执行对应的操作。

个人的一点分析

这个配置不错 https://www.cnblogs.com/whkl-m/p/6627864.html

vue cli打包文件优化工具 webpack-bundle-analyzer

vue-cli的webpack模板项目配置文件分析https://blog.csdn.net/hongchh/article/details/55113751

我的webpack路相关推荐

  1. webpack学习之路

    webpack学习之路 当自己在学习webpack的时候,在网上发现中文的很详细的教程很少,于是便想将自己学习webpack的笔记记录整理下来,便有了这篇文章,希望对大家有所帮助,如果有错误,欢迎大家 ...

  2. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  3. webpack踩坑之路 (2)——图片的路径与打包

    webpack踩坑之路 (2)--图片的路径与打包 刚开始用webpack的同学很容易掉进图片打包这个坑里,比如打包出来的图片地址不对或者有的图片并不能打包进我们的目标文件夹里(bundle).下面我 ...

  4. vue进阶之路 webpack打包 持续更新

    MVVM设计思想 M(model) V(view) VM(View-Model) Vue生命周期 挂载(初始化相关属性) beforeCreate->在实力初始化之后,数据观测和配置之前被调用 ...

  5. 修改html时webpack热更新,webpack学习之路(二)webpack-dev-server实现热更新

    上一章对webpack的配置有了简单的认识. 这一章,我需要学习的是webpack热更新,因为在开发过程中,不希望当文件更改时,人肉去编译文件,刷新浏览器. webpack热更新 webpack-de ...

  6. webpack 打包编译优化之路

    一.摘要 从最初的html css js 混合编程,到分离编程.再到用上各种框架 react vue angular , 伴随着框架和模块化的概念铺开,打包编译工具渐渐浮出水面.从2013年开始使用打 ...

  7. Webpack 4x 之路 ( 五 )

    在上一篇中我们在html文件中也引用了一张图片,打包完毕后在浏览器控制台报错: GET file:///D:/myweb/webpack/webpack_study_demo/webpack_new_ ...

  8. html公共模块提取出去,webpack 填坑之路--提取独立文件(模块)

    前言 最近重新看了一遍 webpack 提取公共文件的配置.原来觉得这东西是个玄学,都是 "凭感觉" 配置.这篇文章将以解决实际开发遇到的问题为核心,悉数利用 webpack 提取 ...

  9. webpack学习之路(四)webpack-hot-middleware实现热更新

    上一节我学习了webpack-dev-middleware,但是单独使用它并没有实现热更新,所以这节我要学习搭配使用webpack-hot-middleware,来实现热更新功能. 创建项目 我们依然 ...

最新文章

  1. C#程序如何对接比特币钱包节点?
  2. 关于IIS和Serv-U在同一台服务器中端口冲突问题
  3. Spring MVC零配置(全注解)(版本5.0.7)
  4. python设计大赛_GitHub - FatBallFish/Multimedia-Python: 多媒体设计大赛-Python后端
  5. oracle启动监听_【DB笔试面试530】在Oracle中,有哪些重要后台进程?
  6. 【转载】web.xml中的classpath和classpath*
  7. C#之网络字节序与主机字节序互转
  8. 华为鸿蒙描述文件,华为鸿蒙HarmonyOS Beta3 2.0.0.110
  9. 2010年下半年信息系统监理师下午题的答题参考五
  10. 刚体转动惯量的测定实验数据软件_物理吸附实验数据分析 第11部分 在Origin软件中由物理吸附等温线确定材料的t图比表面积的方法...
  11. 基于JVM原理JMM模型和CPU缓存模型深入理解Java并发编程
  12. 第一次爬虫之Select 小猪短租
  13. discuz定时采集批量自动发帖
  14. 腾讯云服务器操作系统TencentOS安装与体验
  15. 百问网7天物联网智能家居(第七天)
  16. [BZOJ1779][Usaco2010 Hol]Cowwar 奶牛战争(最大流)
  17. 属性python_Python属性描述符(一)
  18. 浏览器端使用less.js无法解析less文件
  19. Google Deepmind的自杀开关研究或缓解人工智能恐慌
  20. ybt1283:登山

热门文章

  1. xml字符串转xml对象,xml对象转json对象
  2. 最少拦截系统 贪心
  3. 编译安装NTP时间服务报错
  4. 使expect脚本传回返回值
  5. 绑定MAC地址 局域网防arp ARP病毒
  6. python中字符串函数的作用_python 基础学习笔记(2)---字符串功能函数
  7. 计算机设备的变化,这些年电脑桌上的变迁 篇一:设备的更迭
  8. 中国地质大学网络计算机考试试题,2017年中国地质大学(武汉)计算机学院830计算机软件综合之计算机网络考研题库...
  9. android so文件不混淆_Android studio 混淆打包时如何忽略依赖库中的第三方.so文件...
  10. html上传图片至数据库,Django 图片上传到数据库 并调用显示