webpack 5 mode的作用和区别解析

 更新时间:2024年01月08日 10:23:54   作者:陆康永  
Webpack 5 是一款强大的模块打包工具,可用于将许多分散的模块按照依赖关系打包成一个(或多个)bundle,这篇文章给大家介绍webpack 5 mode的作用和区别解析,感兴趣的朋友跟随小编一起看看吧

webpack 5 mode的作用和区别

通过选择 developmentproduction 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production

会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 developmen或者production. 为模块和 chunk 启用有效的名。

例如js文件里面打印 process.env.NODE_ENV会得到你配置的值

development和production的区别

代码编译后的结果不同

development模式

development模式会把js内容放到eval里面执行,打包后的js文件内容如下:

eval的作用是动态执行js,这样可以方便动态更新里面的内容

((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sum */ \"./src/sum.js\");\n\nconsole.log(\"dsfasdf\")\nconst result = (0,_sum__WEBPACK_IMPORTED_MODULE_0__[\"default\"])([1, 2]);\nconsole.log(\"result\", result)\nconst result2 = (0,_sum__WEBPACK_IMPORTED_MODULE_0__[\"default\"])([1, 2, 3]);\nconsole.log(\"result\", result2)\nconsole.log(\"env\", \"development\")\n\n//# sourceURL=webpack://demo1/./src/main.js?");
});

production模式

则是编译后的纯代码

(()=>{"use strict";
const o=o=>o.reduce(((o,s)=>o+s),0);
console.log("dsfasdf");
const s=o([1,2]);
console.log("result",s);
const c=o([1,2,3]);
console.log("result",c),
console.log("env","production")
})();

production开启内部插件,development没有

  • FlagDependencyUsagePlugin:编译时标记nodemodule依赖 unused harmony export ,用于 Tree shaking(移除没有使用到的代码)
  • FlagIncludedChunksPlugin 编译时候标记,移除chunks中没有使用到的代码(文件分割后输入的文件叫做chunk文件)
  • ModuleConcatenationPlugin:在webpack打包时,将bundle 内各个模块预编译到一个闭包中,提升代码在浏览器中的执行速度(相比之前的打包方式—每个模块都是一个闭包)
  •   NoEmitOnErrorsPlugin:在编译出现错误时,跳过输出阶段。这样可以确保输出资源不会包含错误

实战

初始化npm项目

npm init -y     

目录下生成了package.json 文件

安装webpack依赖

npm i webpack weblack-cli -D

新建src/main.js,内容如下:

import sum from "./sum"
console.log("dsfasdf")
const result = sum([1, 2]);
console.log("result", result)
const result2 = sum([1, 2, 3]);
console.log("result", result2)
console.log("env", process.env.NODE_ENV)

新建src/sum.js,内容如下:

var sum = (arr) => arr.reduce((pre, curr) => {
    pre += curr;
    return pre;
}, 0)
export default sum;

执行命令:

npx webpack ./src/mian.js ---mode=development

得到目录/.dist/main.js,内容如上面所述的development模式的内容

执行命令:

npx webpack ./src/mian.js ---mode=production

得到目录/.dist/main.js,内容如上面所述的production模式的内容

输入内容为空

如果main.js文件内容如下

var sum = (arr) => arr.reduce((pre, curr) => {
    pre += curr;
    return pre;
}, 0)
export default sum;

在production模式下输出文件内容为空,因为开启了FlagIncludedChunksPlugin模块,移除了没有被调用的代码 

补充:

Webpack5开发模式选择

Webpack 5 是一款强大的模块打包工具,可用于将许多分散的模块按照依赖关系打包成一个(或多个)bundle。在Webpack 5中,主要有两种开发模式,分别是开发模式(development)和生产模式(production)。这两种模式主要的区别和各自的作用如下:

1.开发模式(development):这种模式主要是为了提升开发过程中的体验,做了一些优化。如:

  • 开启了模块热替换(HMR):应用程序运行过程中替换、添加或删除模块,无需完全刷新页面。
  • 优化了构建速度:使用了更快的内存中的编译和评估。
  • 提供了更详细的错误和警告信息:帮助开发者更好地理解和解决问题。
  • 编译后的代码不会被压缩,便于调试和分析。

2.生产模式(production):这种模式主要是为了优化打包后的代码,提升运行效率。如:

  • 自动删除未引用代码(tree shaking):只打包实际需要的代码,减小bundle的大小。
  • 自动进行代码压缩:通过UglifyJS或者Terser等工具,将代码中的空格、换行等无用字符删除,变量名简化等,以减小bundle的大小。
  • 自动设置process.env.NODE_ENV为production,让一些库如React等在生产环境下运行更优化的代码。

记住,你可以通过在webpack的配置文件中设置mode字段为developmentproduction来选择使用哪种模式。默认情况下,mode的值为production

到此这篇关于webpack 5 mode的作用和区别的文章就介绍到这了,更多相关webpack 5 mode内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • fckeditor 获取文本框值的实现代码

    fckeditor 获取文本框值的实现代码

    获取文本框值的实现代码
    2009-02-02
  • 微信小程序实现购物车页面

    微信小程序实现购物车页面

    这篇文章主要为大家详细介绍了微信小程序实现购物车页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 利用原生JS自动生成文章标题树的实例

    利用原生JS自动生成文章标题树的实例

    网上关于生成文章标题树的示例很多,这篇文章介绍的是利用原生JS实现自动生成文章标题树,实现过程很简单,有需要的可以参考借鉴。
    2016-08-08
  • JavaScript基础知识及常用方法总结

    JavaScript基础知识及常用方法总结

    JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的,通过本篇文章给大家介绍javascript基础知识及常用方法总结,对js基础知识及常用方法相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • 原生javaScript实现图片延时加载的方法

    原生javaScript实现图片延时加载的方法

    这篇文章主要介绍了原生javaScript实现图片延时加载的方法,无需通过载入jQuery脚本即可实现图片的延时加载效果,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • window.onresize 多次触发的解决方法

    window.onresize 多次触发的解决方法

    用了window.onresize但是发现每次 onresize 后页面中状态总是不对,下面与大家分享下onresize 事件多次触发的解决方法
    2013-11-11
  • 逻辑表达式中与或非的用法详解

    逻辑表达式中与或非的用法详解

    这篇文章主要介绍了逻辑表达式中与或非的用法的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • 小程序红包雨的实现示例

    小程序红包雨的实现示例

    这篇文章主要介绍了小程序红包雨的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • layui问题之模拟select点击事件的实例讲解

    layui问题之模拟select点击事件的实例讲解

    今天小编就为大家分享一篇layui问题之模拟select点击事件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • JavaScript NaN和Infinity特殊值 [译]

    JavaScript NaN和Infinity特殊值 [译]

    本文要讲的是两个特殊值,NaN和Infinity,返回这两个值的操作通常都应该返回正常的数字
    2012-09-09

最新评论