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 模块

相关推荐
辞旧 lekkk2 小时前
【c++】c++11(上)
开发语言·c++·学习·萌新
走在路上的菜鸟2 小时前
Android学Dart学习笔记第二十一节 类-点的简写
android·笔记·学习·flutter
黑客思维者2 小时前
机器学习009:监督学习【回归算法】(岭回归)-- 给模型一个“清醒”的约束
学习·机器学习·回归·监督学习·岭回归
深蓝海拓2 小时前
PySide6从0开始学习的笔记(十一) QSS 属性选择器
笔记·python·qt·学习·pyqt
代码游侠3 小时前
学习笔记——Linux进程间通信(IPC)
linux·运维·笔记·学习·算法
xyx-3v3 小时前
RK3506G移植APM飞控的可行性
单片机·学习
free-elcmacom3 小时前
机器学习高阶教程<6>推荐系统高阶修炼手册:混排、多任务与在线学习,解锁精准推荐新境界
人工智能·python·学习·算法·机器学习·机器人
崇山峻岭之间3 小时前
Matlab学习记录06
前端·学习·matlab
黑客思维者3 小时前
机器学习008:监督学习【回归算法】(逻辑回归)--AI世界的“是非判断题大师”
人工智能·学习·机器学习·逻辑回归