前言


使用当前的webpack配置能不能打包构建项目呢?当然可以,但这不是我们想要的,所以,让我们来看一看生产环境需要怎么配置webpack吧

开发


  1. 生产环境配置
    在根目录创建webpack.pro.config.js
const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')module.exports = {entry:{main:['babel-polyfill','./src/index.js'],        vendors: ['react','react-dom','react-router-dom','whatwg-fetch']},output:{path:path.resolve(__dirname,'dist'),filename:'bundle.[hash:4].js'},module:{rules:[{  test: /\.(woff|eot|ttf|svg|png|jpg)$/,  use: [  {  loader: 'url-loader',  options: {  limit: '1024' ,name: '[name].[hash:4].[ext]'  }                        },  ]  },{  test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,use: [  {  loader: 'url-loader',  options: {  limit: '1024',name: '[name].[hash:4].[ext]'  }  },  ]  },{test: /\.(css|less)$/,use: ExtractTextPlugin.extract({fallback: 'style-loader',use: ["css-loader","less-loader"]})},{test:/\.(js|jsx)$/,use:"babel-loader",exclude:/node_modules/}]},devtool: false,plugins:[// html 模板插件new HtmlWebpackPlugin({template:'./src/index.html',favicon: './public/favicon.png'}),// 启用作用域提升,让代码文件更小、运行的更快new webpack.optimize.ModuleConcatenationPlugin(),// 提取公共代码vendorsnew webpack.optimize.CommonsChunkPlugin({name:'vendors',filename:'[name].[hash:4].js'}),// 抽离出cssnew ExtractTextPlugin("style.css"),// 压缩js代码new webpack.optimize.UglifyJsPlugin({compress: {warnings: false,drop_console: true,pure_funcs: ['console.log']}}),// 定义全局常量new webpack.DefinePlugin({"process.env": {"NODE_ENV": JSON.stringify("production")}}),// 加署名new webpack.BannerPlugin('Copyright by Zero https://github.com/l-Lemon/blog')]
}
复制代码

package.json的 script 中加入

"build": "webpack --config webpack.pro.config.js"
复制代码

运行 npm run build 根目录会生成 dist文件夹 和压缩后的代码。

  1. 抽离公共的webpack配置
    我们发现生产环境和开发环境中的webpack配置有很多相同的配置,为了维护性我们最好抽离出来。
    创建webapck.base.js文件来存我们公共配置
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
// 抽离css
const extractCss = new ExtractTextPlugin("style.css")
// html 模版
const htmlTemplate = new HtmlWebpackPlugin({template:'./src/index.html',favicon: './public/favicon.png'})
const config = {output:{path:path.resolve(__dirname,'dist'),filename:'bundle.[hash:4].js'},module:{rules:[{  test: /\.(woff|eot|ttf|svg|png|jpg)$/,  use: [  {  loader: 'url-loader',  options: {  limit: '1024' ,name: '[name].[hash:4].[ext]'  }                        },  ]  },{  test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,use: [  {  loader: 'url-loader',  options: {  limit: '1024',name: '[name].[hash:4].[ext]'  }  },  ]  },{test: /\.(css|less)$/,use: ExtractTextPlugin.extract({fallback: 'style-loader',use: ["css-loader","less-loader"]})},{test:/\.(js|jsx)$/,use:"babel-loader",exclude:/node_modules/}]},
}module.exports = {htmlTemplate,extractCss,config
}
复制代码
  1. 重构开发环境配置
    修改开发环境的webpack.config.js
const path = require('path')
const baseConfig = require('./webpack.base')module.exports = {entry:{main:['babel-polyfill','./src/index.js'],},...baseConfig.config,plugins:[baseConfig.htmlTemplate,baseConfig.extractCss],devServer:{contentBase: path.join(__dirname, "dist"),compress: true,port: 9000,proxy: {"/api": {target: "http://127.0.0.1:3000/",pathRewrite: {"^/api" : ""}}}}
}
复制代码
  1. 重构生产环境配置
    修改开发环境的webpack.pro.config.js
const webpack = require('webpack')
const baseConfig = require('./webpack.base')module.exports = {entry:{main:['babel-polyfill','./src/index.js'],// 将第三方库包单独打包,充分利用浏览器缓存        vendors: ['react','react-dom','react-router-dom','whatwg-fetch']},...baseConfig.config,devtool: false,plugins:[// html 模板插件baseConfig.htmlTemplate,// 启用作用域提升,让代码文件更小、运行的更快new webpack.optimize.ModuleConcatenationPlugin(),// 提取公共代码vendorsnew webpack.optimize.CommonsChunkPlugin({name:'vendors',filename:'[name].[hash:4].js'}),// 抽离出cssbaseConfig.extractCss,// 压缩js代码new webpack.optimize.UglifyJsPlugin({compress: {warnings: false,drop_console: true,pure_funcs: ['console.log']}}),// 定义全局常量new webpack.DefinePlugin({"process.env": {"NODE_ENV": JSON.stringify("production")}}),// 加署名new webpack.BannerPlugin('Copyright by Zero https://github.com/l-Lemon/blog')]
}
复制代码

好了,现在我们再来试试npm run devnpm run build命令,没问题都可以完美运行。

总结


这篇文章我们介绍了生产环境webpack的配置,并且抽出了公共配置,重构了开发环境和生产环境的配置。

下篇我们来介绍实现单元测试

系列文章


  1. 从零开始React项目架构(一)
  2. 从零开始React项目架构(二)
  3. 从零开始React项目架构(三)

源码


React项目架构

从零开始React项目架构(四)相关推荐

  1. 【React项目架构 】+后台管理系统cms实操

    React项目架构 一. react脚手架 (一) .yarn 安装 (二) .react安装 npx create-react-app [-g] npm i react@17.0.0 react-d ...

  2. react antd confirm content list_react简单的项目架构搭建过程

    前言 react官方推荐的脚手架create-react-app因为想给用户的最大自由度所以并没有像vue的脚手架那样生成的项目架构那么齐全,用这个写写demo还行,但是真正用在项目上还是不太合适的. ...

  3. 【Java EE】从零开始写项目【总结】

    从零开发项目概述 最近这一直在复习数据结构和算法,也就是前面发出去的排序算法八大基础排序总结,Java实现单向链表,栈和队列就是这么简单,十道简单算法题等等- 被虐得不要不要的,即使是非常简单有时候绕 ...

  4. 160921、React入门教程第一课--从零开始构建项目

    工欲善其事必先利其器,现在的node环境下,有太多好用的工具能够帮助我们更好的开发和维护管理项目. 我本人不建议什么功能都自己写,我比较喜欢代码复用.只要能找到npm包来实现的功能,坚决不自己敲代码. ...

  5. 从零开始一个webpack+react项目

    从零开始一个webpack+react项目 最近在做react组件化的分享,从项目中抽离组件,那么第一步自然是搭建相关的环境 本篇旨在从零开始,用最少的配置.最少的代码.最少的依赖来搭建一个最简单的w ...

  6. 从零开始搭建一个react项目

    Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...

  7. react项目_如何从零开始创建React项目(三种方式)

    在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,在这里介绍三种从零开始创建React项目的方式,分别是在浏览器中直接引入.使用官方脚手架create ...

  8. python接口自动化(四十二)- 项目架构设计之大结局(超详解)

    简介 这一篇主要是将前边的所有知识做一个整合,把各种各样的砖块-模块(post请求,get请求,logging,参数关联,接口封装等等)垒起来,搭建一个房子.并且有很多小伙伴对于接口项目测试的框架一筹 ...

  9. React从零开始搭建项目

    一.脚手架创建React项目 二. 删除src目录下的所有文件 三.创建App.js import React, {Component} from "react";/* 应用的根组 ...

最新文章

  1. Unit Test测试框架中的测试的执行顺序
  2. Tungsten Fabric SDN — VNC API — API Client 的 Python SDK
  3. Vue单文件组件与vue-loader
  4. LeetCode 170. 两数之和 III - 数据结构设计(哈希map)
  5. 使用github+hexo搭建静态blog
  6. pyvex 的正确安装方式
  7. 原生开发小程序 和 wepy 、 mpvue 对比
  8. jeewx 微信管家 - 举办商业版本免费试用活动
  9. 对“优秀工程师”的一点感悟
  10. JSK-24 函数规律【基础】
  11. 量子力学概论_科学网—《量子力学导论》潘必才 - 中国科大出版社的博文
  12. Permute 3.6.5 小巧便捷的多媒体文件格式转换器
  13. bulma.css_在5分钟内学习Bulma CSS-初学者教程
  14. python圣诞节_圣诞节,用Python给自己加顶“圣诞帽”
  15. 大班音乐机器人反思_幼儿园大班音乐游戏教案活动《机器人》含反思
  16. Sara 老友记 第一季第六集 Joey天天演烂片
  17. ffmpeg实例,fade淡入淡出效果
  18. Tracup|10个有效的工作习惯,成功的例子和技巧
  19. 夹治具设计需要遵循的一些设计准则:
  20. Remote NDIS (RNDIS)

热门文章

  1. 你需要的git命令大全来了
  2. 深入剖析Redis系列(四) - Redis数据结构与全局命令概述
  3. 机房管理系列之杀毒服务器维护
  4. ORA-01400: 无法将 NULL 插入 (CHARGE_WQRL.SF_JMQTFY_T.BH)
  5. Android简明开发教程二十一:访问Internet 绘制在线地图
  6. 利用正则表达式截取特定字符中间字符
  7. 丁洪波 -- 不要“ 总是拿着微不足道的成就来骗自己”
  8. 4. ZooKeeper 基本操作
  9. List集合的remove一个对象的方法
  10. 用UIpickView实现省市的联动