2025/12/19学习记录

webpack

如果 require 中含有表达式,由于编译时不清楚具体导入了哪个模块,所以会创建一个上下文,会对该目录下所模块的引用,可以使用匹配正则表达式的请求来导入这些模块,上下文模块中存在一个映射,该映射用于将请求转换为 模块 ID,这意味着webpack能够动态导入

可以通过 require.context() 函数实现自定义上下文,传入三个参数,要搜索的目录,是否还继续搜索子目录,匹配文件的正则表达式

复制代码
require.context(
  directory,
  (useSubdirectories = true),
  (regExp = /^\.\/.*$/),
  (mode = 'sync')
);

Tree shaking 通常描述 移除 js 上下文中的死代码(即永远不会执行的代码)

通过 package.json 的 "sideEffects" 属性即可实现此目的。

复制代码
{
  "name": "your-project",
  "sideEffects": false
}

sideEffects 和 useExports (更多的被称为 tree shaking) 是俩种不同的优化方式,sideEffects 更为有效是因为他允许跳过整个模块/文件和整个文件子树,useExports 依赖于 terser 检测语句中的副作用,是 一个js任务

/*#__PURE__*/ 注释可以告诉 webpack 某个函数调用无副作用。它可以被放到函数调用之前,用来标记此函数调用是无副作用的

环境

开发环境中,我们通常需要强大的 source map 和 live reloading 或者 hmr ,而生产环境则需要,压缩 bundle 更轻量的 source map,资源优化,但是也会出现 生产环境和开发环境,重复配置,为了不重复配置,我们会有一个 webpack-merge 工具来 合并配置

安装

复制代码
npm install --save-dev webpack-merge

webpack.common.js

复制代码
const path = require('path');
 const HtmlWebpackPlugin = require('html-webpack-plugin');

 module.exports = {
   entry: {
     app: './src/index.js',
   },
   plugins: [
     new HtmlWebpackPlugin({
       title: 'Production',
     }),
   ],
   output: {
     filename: '[name].bundle.js',
     path: path.resolve(__dirname, 'dist'),
     clean: true,
   },
 };

webpack.dev.js

复制代码
 const { merge } = require('webpack-merge');
 const common = require('./webpack.common.js');

 module.exports = merge(common, {
   mode: 'development',
   devtool: 'inline-source-map',
   devServer: {
     static: './dist',
   },
 });

webpack.prod.js

复制代码
const { merge } = require('webpack-merge');
 const common = require('./webpack.common.js');

 module.exports = merge(common, {
   mode: 'production',
 });

nodejs 通过设置 package.json 中的属性来显示设置文件模块类型,在package.json中设置 type:"module" 会强制 package.json 下的文件使用 es ,而 设置成 CommonJs 会强制使用 CommonJs 模块

相关推荐
爱上好庆祝7 小时前
svg图片
前端·css·学习·html·css3
嵌入式小企鹅7 小时前
蓝牙学习系列(八):BLE L2CAP 协议详解
网络·学习·蓝牙·ble·协议栈·l2cap
jiayong238 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
格鸰爱童话9 小时前
向AI学习项目技能(五)
java·学习
技术人生黄勇9 小时前
拆解 Hermes Agent:开源 Agent 里唯一的闭环学习系统
学习
凉、介9 小时前
别再把 PCIe 的 inbound/outbound、iATU 和 eDMA 混为一谈
linux·笔记·学习·嵌入式·pcie
speop10 小时前
TASK01 | Reasoning Kindom
学习
2301_8227032011 小时前
鸿蒙flutter三方库实战——教育与学习平台:Flutter Markdown
学习·算法·flutter·华为·harmonyos·鸿蒙
码喽7号11 小时前
vue学习四:Axios网络请求
前端·vue.js·学习
星幻元宇VR11 小时前
VR科普行走平台适用哪些科普教育主题
科技·学习·安全·vr·虚拟现实