QuikieApps

反应 Webpack生产构建:如何实现

关于React Webpack生产版本的简介:

反应 Webpack Production构建是一个静态模块捆绑器。因此,这仅意味着,一旦您构建或应用程序支持具有webpack支持的任何框架或库,Webpack就会发挥其魔力,并在内部构建一个依赖关系图,以映射您项目所需的每个模块并生成一个或其他捆绑包。

如果在任何时候一个文件依赖另一个文件,Webpack会将任何文件视为依赖项。这样,Webpack可以获取非代码资产,例如Web字体或图像,并将它们作为应用程序的依赖项提供。 

每当Webpack开始捆绑您的应用程序时,它都会从在命令行或其配置文件中定义的模块列表开始。因此,从这些切入点开始,Webpack递归地构建一个依赖关系图,其中包括应用程序所需的所有模块。一旦依赖关系图准备就绪,Webpack便会撒下魔力,并将所有这些模块捆绑为许多较小的捆绑包-通常只有一个-由浏览器加载。 

 

MWebpack中的颂歌 

反应中的Webpack包含一个配置文件,程序员可以编辑该配置文件以使应用程序根据要求运行。配置文件包含Webpack配置的五个核心概念。其中,模式 是webpack的五种配置之一, 允许开发人员将其值设置为 发展, 生产, 要么 没有。默认情况下,该模式设置为生产。 

 

现在的问题是,将模式更改为开发或生产后究竟发生了什么?

 

答案是,webpack仅在Node环境中运行。因此,您的系统必须安装Node或NodeJS并相应地设置环境。使用webpack的开发模式时,环境变量 NODE_ENV 节点使用的设置为 发展。 开发环境在开发人员的计算机上本地运行。这可以调试应用程序并进行错误检查。 

process.env.NODE_ENV p设置为 “发展”

 

因此将模式设置为 生产 将节点设置更改为生产。可以将应用程序部署到服务器,以使其有用。它设置 process.env.NODE_ENV p'生产' 并启用 FlagDependencyUsagePlugin , 标记包括大块插件 , ModuleConcatenationPlugin , NoEmitOnErrorsPlugin , OccurrenceOrderPlugin , SideEffectsFlagPlugin Terser插件 也一样 

 

什么是生产版本? 

生产构建旨在最小化捆束的尺寸并改善资产以增加装载时间。它提取CSS,图像以及您通过webpack加载的各种资源。它具有JS代码的压缩形式,可以提高性能。生产构建的目标与开发构建有很大不同。在开发中,开发人员的主要重点是在本地提供文件

(本地服务器)具有实时重载或HMR(热模块替换)。但是,生产构建的目标是专注于创建微型捆绑包,轻量级源映射和资产的更高优化以缩短加载时间。因此,我们应该为每种环境编写单独的Webpack配置。

在继续进行操作之前,您需要先了解webpack的配置文件设置及其核心概念。 

 

实施React Webpack生产版本 

所有开发人员都遵循一条规则,即DRY代码,代表不重复自己或一次又一次不写相同的代码。我们将在生产构建或React应用程序中执行相同的操作。我们将分开生产和开发特定部分,并仍然维护具有可共享代码的通用文件。这将遵循DRY规则,并且代码的可读性将提高。 

请按照以下步骤操作: 
  1. 首先,我们需要安装一个名为 webpack合并. 它提供了合并函数,该函数合并数组并合并对象以创建新对象。如果遇到函数,它将执行该函数,通过算法运行结果,然后将返回的值再次包装在函数中。 webpack需要使用它来合并配置对象。安装: npm install –save-dev webpack-merge
进口:const {merge} = require(‘webpack-merge’); 
链接: //survivejs.com/webpack/developing/composing-configuration/ 

 

  1. 现在开始拆分代码。这意味着生产版本和开发版本通用的代码将作为一个单独的文件保存,称为 webpack.common.js 剩余的生产和开发专用代码将添加到 单独的文件。
webpack.common.js 

const path = require('path'); 

const {CleanWebpackPlugin} = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require(‘html-webpack-plugin’); 

module.exports = { 

条目:{ 

应用:“ ./ src / index.js”, 

}, 

插件: 

新的CleanWebpackPlugin(), 

新的HtmlWebpackPlugin({ 

标题:“生产”, 

}), 

], 

输出:{ 

文件名:“ [name] .bundle.js”, 

路径:path.resolve(__ dirname,'dist'),

}, 

}; 

该文件包含一个入口点,用于指定Webpack从文件或文件的路径开始捆绑,如其 条目 属性。用于在我们的Webpack中添加插件的plugin属性 捆绑优化,资产管理和环境注入 变量和输出属性 创建依赖关系图并指定webpack发出捆绑的位置。 

 

  1. 现在,我们将开发代码与生产代码分开。正如我们讨论过的 较早时,编写DRY代码是一个好习惯。
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合并模块和 webpack.common.js 在此文件中是必需的或已导入 用于与该文件合并 webpack.common.js。它合并t他反对 webpack.common.js 与此文件的对象一起创建一个新对象。 

 

  1. 现在也该分离生产代码了。
webpack.prod.js 

const {merge} = require('webpack-merge'); 

const common = require(‘../ webpack.common.js’); 

module.exports = merge(common,{ 

 mode: '生产', 

 } 

); 

Webpack合并模块和 webpack.common.js 在此文件中也是必需的。因此对于 合并 webpack.prod.js 与文件 webpack.common.js。它合并了他反对 webpack.common.js 与此文件的对象一起创建一个新对象。 

 

  1. 因此,最后,对NPM脚本进行更改。而在 package.json 该应用程序的文件, 改变 剧本 属性。
package.json 

{ 

“名称”:“发展”,

“版本”:“ 1.0.0”, 

“描述”:“”, 

“ main”:“ src / index.js”, 

脚本”:{ 

“开始”:“ webpack-dev-server –open –config webpack.dev.js”, “构建”:“ webpack –config webpack.prod.js” 

}, 

“关键字”:[], 

“作者”:“”, 

“许可证”:“ ISC”, 

“ devDependencies”:{ 

} 

} 

运行该应用程序以查看可见的更改。 

结论 

许多图书馆依赖 process.env.NODE_ENV 变量以确定应在库中包括什么。所以当它被设置 生产, 库可能会丢弃大量代码以优化应用程序,并检查代码将如何为实际用户或客户端运行。使用生产版本,Webpack借助以下功能最小化代码 Terser插件.

 

Exit mobile version