生产环境构建

developmentproduction的构建目标差异很大。dev中,需要具有实时重新加载或HMR能力的 source map 和 server。而在prod中目标则关注更小的 bundle,更轻量的 source map,以及更优化的资源,以改善加载时间。由于要遵循逻辑分离,通常建议为每个环境编写彼此独立的webpack 配置。

虽然将两者做了略微区分,但是还是会遵循不重复原则(DRY),保留一个通用配置,不必在环境特定的配置中重复代码。再使用 webpack-merge 的工具将这些配置合并在一起。

安装 webpack-merge 将配置代码进行分离:

npm install --save-dev webpack-merge

创建对应环境的配置和通用配置文件:

webpack.common.js 中,设置了 entryoutput ,并且引入两个环境公用的全部插件。

webpack.dev.js 中,添加了推荐的 source mapdevServer

webpack.prod.js 中,引入了 tree shaking的相关配置。

webpack.common.js

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = {
entry: {
app: './src/index.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
plugins: [
new CleanWebpackPlugin({
cleanStaleWebpackAssets: false
}),
new HtmlWebpackPlugin({
title: 'Production'
})
],
};

webpack.dev.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js'); module.exports = merge(common, {
devtool: 'inline-source-map',
devServer: {
contentBase: './dist'
}
});

webpack.prod.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js'); module.exports = merge(common, {
devtool: 'source-map',
optimization: {
usedExports: true,
minimize: true,
},
});

设置新的scripts 执行命令,运行脚本查看输出结果的变化:

"scripts": {
"devbuild": "webpack-dev-server --open --config webpack.dev.js",
"prodbuild": "webpack --config webpack.prod.js"
},

指定环境

NODE_ENV 是由 Node.js 暴露给执行脚本的系统环境变量。通常用于决定在开发环境与生产环境下,服务器工具、构建脚本和客户端库的行为。然而无法 webpack.config.js 中,直接将 process.env.NODE_ENV 设置为 "production"

许多库与process.env.NODE_ENV 环境变量关联,决定引用哪些内容。当处于开发环境时,为了分布调试,可能会添加额外的日志和测试。使用 process.env.NODE_ENV === 'production' 时,还可能进行代码优化,从而删除或添加一些代码。可以使用 webpack 内置的 DefinePlugin定义这个环境变量:

webpack.prod.js

const webpack = require('webpack');
module.exports = merge(common, {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production')
})
]
});

修改入口 index.js ,查看环境变量的值,重新编译和打包后:

// index.js
console.log( process.env.NODE_ENV ); // 执行 devbuild 打印 'development',执行 prodbuild 打印 'production',

webpack4.15.1 学习笔记(五) — 生产环境构建的更多相关文章

  1. blfs(systemd版本)学习笔记-为桌面环境构建xorg服务

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs准备使用桌面环境,首先需要构建xorg服务 xorg服务项目地址:http://www.linuxfromscratch. ...

  2. blfs(systemv版本)学习笔记-为桌面环境构建xorg服务

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs准备使用桌面环境,首先需要构建xorg服务 xorg服务项目地址:http://www.linuxfromscratch. ...

  3. APUE 学习笔记(五) 进程环境

    1.main函数 C程序总是从main函数开始执行,当内核执行C程序时,在调用main函数之前先调用exec函数从内核获取命令行参数和环境变量值   2.进程终止 正常终止: (1)在main函数内执 ...

  4. Netty学习笔记(五) 使用Netty构建静态网页服务器

    昨天在继续完善基于Netty构建的聊天室系统的过程中,发现了一个有意思的知识点,特此拿来做一个简单的静态网页服务器,好好的玩一玩Netty. 但是不管怎么说利用netty实现各种功能的流程都是类似的 ...

  5. 《Think Python》第15章学习笔记

    目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...

  6. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  7. ELK-6.5.3学习笔记–elk基础环境安装

    本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...

  8. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  9. Java IO学习笔记五:BIO到NIO

    作者:Grey 原文地址: Java IO学习笔记五:BIO到NIO 准备环境 准备一个CentOS7的Linux实例: 实例的IP: 192.168.205.138 我们这次实验的目的就是直观感受一 ...

  10. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

随机推荐

  1. IIS 部署 Python 环境

    1.安装IIS 勾选特殊CGI程序2.Python 环境 (环境变量配置)3.如果没有pip命令 先下载安装pip python setup.py install4.pip install wfast ...

  2. php的下载与安装

    一,进入到php的官方网站   https://www.php.net/   ,进入到下载页面: 选择 PHP 7.2.30 的Windows版本 具体的下载页面版本区分: 下载后,得到如下压缩包到如 ...

  3. js实现 StringBuilder

    function StringBuilder() { this._stringArray = new Array(); } StringBuilder.prototype.append = funct ...

  4. golang 怎么获取kubernetes deployments的状态?

    如果我们需要把k8s的信息展示为一个友好的web页面.那么deployment 的信息基本上是非常重要的(大部分的服务都是使用deployment部署). 从yaml 中我们能获取到很多关于deplo ...

  5. 理解Vue 3响应式系统原理

    title: 理解Vue 3响应式系统原理 date: 2024/5/28 15:44:47 updated: 2024/5/28 15:44:47 categories: 前端开发 tags: Vu ...

  6. AI实用技巧 | 5分钟将coze集成到微信群机器人

    细心的小伙伴已经注意到,国内的Coze平台已经开放了API,这一发现让他们感到兴奋不已.因此,他们迫切地想要掌握这一机会,将API应用到实际中,让Coze成为他们的得力助手.这样一来,他们就可以避免每 ...

  7. itest(爱测试)开源接口测试&敏捷测试&极简项目管理 7.1.0 发布,ui优化及bug修复

    (一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包 ...

  8. jquery jquery的选择器

      什么是 jQuery 前端的一个方法库/函数库                 将很多过功能,封装好,我们可以直接使用             官网  https://jquery.com/    ...

  9. 算法金 | 只需十四步:从零开始掌握Python机器学习(附资源)

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 1. 引言 1.1 教程目的与读者定位 "启程"往往是最具挑战性的 ...

  10. vue饼图

    结果图 原型 1 <template> 2 <!-- 左右柱状图 --> 3 <div ref="rankEcharts" :style=" ...