WebPack3项目升级webpack5的配置调试记录

news2024/12/31 22:13:15

文章目录

  • 前言
  • 一、webpack3环境
    • 1.1、知识点记录
      • 1.1.1、配置解释
      • 1.1.2、webpack与sass版本对应关系
      • 1.1.3、CommonJS与ESModule
      • 1.1.4、node版本管理nvm
      • 1.1.5、sass-loader、sass与node-sass
    • 1.2、其他
      • 1.2.1、.d.ts是什么文件
      • 1.2.2、react与@types/react版本对应关系
      • 1.2.3、webpack5需要的node版本
  • 二、webpack3升级到webpack5
    • 2.1、更新 package.json 文件中的所有依赖项
      • 2.1.1、npm-check-updates安装
      • 2.1.2、检查更新依赖
      • 2.1.3、安装依赖
      • 2.1.4、问题
    • 2.2、修改webpack.cong.js
    • 2.3、标准webpack5配置文件
  • 三、问题记录
    • 3.1、node版本低的问题
    • 3.2、node-sass问题
    • 3.3、webpack版本低的问题
    • 3.4、webpack版本以及插件不兼容问题
    • 3.5、- -colors问题
    • 3.6、node-sass 的问题
    • 3.7、lib.dom.d.ts中没有layerX属性的问题
    • 3.8、wheelDelta 已废弃问题
    • 3.9、esModule配置问题

前言

在GitHub上找了一个webgl实现地图引擎的开源项目,项目最后一次更新是2016年,当时的webpack是3的版本,原定思路是按照package.json文件进行环境配置,原以为把对应版本的包装好就行,事与愿违,捣鼓了一天,项目太久远了,node webpack sass-loader等等包即便是配好了,还要浏览器支持,最终还是选择webpack3升级webpack5
在webpack3环境搭建以及webpack升级的过程中,同样学到了很多东西,记录一下
在这里插入图片描述

一、webpack3环境

项目拉取下来后,直接npm install,肯定会报错,有啥错就解决,解决不了就记录下,算是给“撞南墙”给个结果

1.1、知识点记录

1.1.1、配置解释

 new HtmlWebpackPlugin({
            filename: './webapp.html',
            template: '!!ejs-loader!./src/webapp/template.html',
            hash: false,
            inject: 'body',
            chunks: ["webapp"]
        })
  1. filename: ‘./webapp.html’
  • 这个字段指定了输出的 HTML 文件的名称和路径。 ./webapp.html 表示该文件会被生成在构建目录的根目录下,并命名为
    webapp.html。
  • template: ‘!!ejs-loader!./src/webapp/template.html’
  1. template 指定了用于生成 HTML 文件的模板文件路径。
  • !!ejs-loader! 表示使用 ejs-loader 来加载模板文件,并通过 ejs 引擎处理它。!! 是 Webpack 中的一种特殊语法,表示强制忽略所有的默认 loader 配置,直接使用 ejs-loader。
  • ./src/webapp/template.html 是相对于项目根目录的模板文件路径,它会作为 HTML 文件的基础模板。
  1. hash: false
  • hash 控制是否在生成的 HTML 文件中自动为打包后的资源添加 hash 值。
  • 如果设置为 false,则不在文件名后加上哈希值,通常用于资源不需要缓存控制的场景。如果你设置为 true,则会为每个资源文件添加一个哈希值,确保文件内容变化时,文件名也会变化。
  1. inject: ‘body’
  • inject 控制如何注入 JS 和 CSS 资源到 HTML 模板中。
  • ‘body’ 表示所有的 JavaScript 文件会被注入到 HTML 文件的 标签之前,而不是 标签中。
  • 另外,还可以设置为 ‘head’,此时会将资源注入到 标签中。
  1. chunks: [“webapp”]
  • chunks 指定了要在生成的 HTML 文件中引入的 JavaScript 文件的名称。
  • [“webapp”] 表示只有名为 webapp 的 chunk 会被注入到最终的 HTML 文件中。
  • 这是 Webpack 的一个优化特性,通常用来控制哪些资源需要被包含到 HTML 中。比如,如果你使用了多入口的配置,只有指定的 chunk 会被注入到 HTML 文件中。
  1. 这段配置的作用是:
  • 使用 ejs-loader 渲染 template.html 模板,生成最终的 webapp.html 文件。
  • 在生成的 HTML 文件中,将包含 webapp chunk 相关的 JavaScript 文件,并且这些文件会被注入到 标签之前。
  • 不会在文件名中添加哈希值(hash: false)。这样的配置通常用于多页面应用(MPA)或者自定义的构建场景。

最终方案:不用ejs了,用html-loader如: template: '!!html-loader!./src/core/template.html'

1.1.2、webpack与sass版本对应关系

  • 对于 Webpack 5,使用 sass-loader 10.x 或更高版本,且安装 sass。
  • 对于 Webpack 4,使用 sass-loader 8.x 或 9.x,建议安装 sass,但也可以使用 node-sass。
  • 推荐始终使用 sass 作为 Sass 编译器,因为 node-sass 已不再维护。。

版本对应表

Webpack 版本sass-loader 版本sass 版本
Webpack 510.x 或 11.x1.x (sass)
Webpack 48.x 或 9.x1.x (sass)
Webpack 4 或 59.x 及以下node-sass (旧版)

1.1.3、CommonJS与ESModule

  • CommonJS 更适合 Node.js 环境,它的同步加载机制和较为简单的语法非常适合服务器端开发。
  • ESModule 是现代 JavaScript 的标准模块格式,适用于浏览器和 Node.js 环境,并且支持更强大的特性,如静态分析和 Tree Shaking。

CommonJS与ESModule的区别对比

特性CommonJSESModule (ESM)
加载方式同步加载(适用于服务器端)异步加载(适用于浏览器端和服务器端)
模块导出module.exports 或 exportsexport 和 export default
模块导入require()import
模块解析动态解析,运行时解析模块静态解析,编译时解析模块(支持静态优化,如 Tree Shaking)
运行时支持完全支持(Node.js)浏览器和 Node.js(需要启用或使用特定的扩展名)
支持的特性适用于 Node.js 环境,且支持同步导入原生支持 ES6 模块化,适合浏览器与服务器端
模块作用域模块内共享状态,exports 可以被修改每个模块都有独立的作用域,不能修改导入的内容
编译时优化不支持静态优化,如 Tree Shaking支持静态分析和优化(例如 Tree Shaking)

1.1.4、node版本管理nvm

注意:

  • 建议安装nvm前卸载掉之前的node
  • cmd命令行需要超级管理员模式
  1. nvm安装包下载
    下载地址:nvm下载地址

  2. node所有的版本
    版本地址:Node所有版本号

  3. 常用命令

    nvm -v 查看当前版本
    nvm --config 
    nvm list 查看已安装node版本列表
    nvm install 版本号 下载对应node版本(如:nvm install 14.20.1)
    nvm use 版本号 切换node版本
    nvm on 开启nvm
    nvm off 关闭nvm	
    

1.1.5、sass-loader、sass与node-sass

  • sass-loader 是 Webpack 的加载器,用于处理 Sass 文件并交给编译器。
    • 功能: sass-loader 是 Webpack 的一个加载器(loader),用于处理和转换 Sass 文件(.scss 或 .sass)到普通的 CSS。它会调用 Sass 编译器(比如 node-sass 或 dart-sass)将 Sass 代码编译成 CSS 代码。
    • sass-loader 必须依赖一个 Sass 编译器(node-sass 或 sass)来完成实际的编译过程。sass-loader 本身并不执行编译,而是通过配置调用具体的 Sass 编译器。
    • 在 Webpack 配置文件中,通常你需要将 sass-loader 放在一系列 CSS 相关的加载器中(如 style-loader 和 css-loader):
    {
      test: /\.scss$/,
      use: [
        'style-loader',  // 将 CSS 插入到页面中
        'css-loader',    // 解析 CSS 文件
        'sass-loader'    // 编译 Sass 到 CSS
      ]
    }
    
    
  • node-sass 是一个基于 C++ 的Sass 编译器(已逐渐被 sass 取代)。
    • 功能: node-sass 是一个用于将 Sass(.scss 或 .sass 文件)编译为 CSS 的 Node.js 库。它是基于 LibSass(一个 C 语言编写的 Sass 编译器)构建的,用于快速编译 Sass 文件。
  • sass 是基于 Dart 的官方 Sass 编译器,推荐在新项目中使用。
    • 功能: sass 是 Dart 语言编写的 Sass 编译器,是 node-sass 的替代方案。随着 node-sass 停止更新和维护,官方推荐使用 sass(Dart 编写的版本)。

1.2、其他

1.2.1、.d.ts是什么文件

在 TypeScript 中,.d.ts 文件用于为外部库、第三方模块或纯 JavaScript 代码提供类型定义,而不需要将这些库或模块的源代码直接转换为 TypeScript 代码。这样,TypeScript 能够使用这些外部模块时,享受类型检查和代码补全的好处。
声明文件并不包含实际的代码实现,而只是提供类型信息,告诉 TypeScript 编译器有关某个模块、类、函数、变量、接口等的类型信息。

1.2.2、react与@types/react版本对应关系

在 React 项目中,react 和 @types/react 是两个关键的依赖包,它们提供了 React 库的功能和类型定义。为了确保项目中 TypeScript 类型的正确性和一致性,react 和 @types/react 需要保持一定的版本对应关系。这里是一些常见的版本对应关系,以及如何选择和配置它们:

  1. React 与 @types/react 版本对应表
React 版本@types/react 版本TypeScript 支持版本
React 18.x@types/react 18.xTypeScript 4.4+
React 17.x@types/react 17.xTypeScript 4.1+
React 16.x@types/react 16.xTypeScript 3.7+
React 15.x@types/react 15.xTypeScript 2.x+

1.2.3、webpack5需要的node版本

Webpack 5 需要 Node.js 版本 10.13.0 或更高版本。为了确保最佳的性能和兼容性,推荐使用 Node.js 14.x 或 Node.js 16.x 版本。
具体说明:

  • Webpack 5 在 2020 年发布,要求 Node.js 10.13.0 及以上版本。
  • 对于长期支持 (LTS) 版本,建议使用 Node.js 14.x 或 16.x,因为它们得到长期的安全更新和支持。
  • 请注意,Webpack 5 不支持 Node.js 8.x 或更低版本。

二、webpack3升级到webpack5

2.1、更新 package.json 文件中的所有依赖项

更新 package.json 文件中的所有依赖项

2.1.1、npm-check-updates安装

npm install -g npm-check-updates

2.1.2、检查更新依赖

ncu -u

  • ncu -u 会更新 package.json 文件中的依赖项版本号

2.1.3、安装依赖

npm install

  • npm install 会安装更新后的依赖项。

2.1.4、问题

  • npm install问题
    在使用ncu -u更新package.json中的依赖版本后,直接install会报如下错,
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: webglobe@0.6.3
npm error Found: webpack@5.97.1
npm error node_modules/webpack
npm error   dev webpack@"^5.97.1" from the root project
npm error
npm error Could not resolve dependency:
npm error peer webpack@"^3.1.0" from extract-text-webpack-plugin@3.0.2
npm error node_modules/extract-text-webpack-plugin
npm error   dev extract-text-webpack-plugin@"^3.0.2" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
  • 解决办法
    • 清缓存:npm cache clean --force
    • 忽略冲突安装npm install --legacy-peer-deps
      • --legacy-peer-deps 选项告诉 npm 使用旧的 peer dependencies 处理方式,即不会自动安装 peer dependencies,而是由用户手动管理。这样可以避免因 peer dependencies 冲突而导致的安装失败。

2.2、修改webpack.cong.js

  • 移除 ExtractTextWebpackPlugin,因为它在 Webpack 5 中已被弃用,取而代之的是 MiniCssExtractPlugin。 移除了 WebpackMd5Hash,因为 Webpack 5 已经默认支持内容哈希。 更新了
  • HtmlWebpackPlugin 的配置,使其更符合 Webpack 5 的语法。
  • 更新 module.rules 中的 loader 语法,使其更符合 Webpack 5 的语法。 添加了 optimization 配置,以启用 CSS 压缩。
  • 更新plugins中的 DefinePlugin 配置,使其更符合 Webpack 5 的语法。
  • 更新process.argv.indexOf(“–ci”) 中的 plugin 语法,使其更符合 Webpack 5 的语法。

2.3、标准webpack5配置文件

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  // 模式配置,可以是 'development' 或 'production'
  mode: 'development',

  // 入口文件
  entry: {
    main: './src/index.js', // 你的主入口文件
  },

  // 输出配置
  output: {
    filename: '[name].[contenthash].js', // 输出文件名,使用 contenthash 以便缓存管理
    path: path.resolve(__dirname, 'dist'), // 输出路径
    clean: true, // 在每次构建前清理输出目录
  },

  // 模块解析配置
  module: {
    rules: [
      // JavaScript 解析
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
          },
        },
      },
      // CSS 解析
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
      // 图片文件解析
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: 'asset/resource',
        generator: {
          filename: 'images/[hash][ext][query]', // 输出图片文件名
        },
      },
      // 字体文件解析
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/i,
        type: 'asset/resource',
        generator: {
          filename: 'fonts/[hash][ext][query]', // 输出字体文件名
        },
      },
    ],
  },

  // 插件配置
  plugins: [
    new CleanWebpackPlugin(), // 清理输出目录
    new HtmlWebpackPlugin({
      template: './src/index.html', // 模板文件
      filename: 'index.html', // 输出文件名
    }),
    new MiniCssExtractPlugin({
      filename: 'styles/[name].[contenthash].css', // 输出 CSS 文件名
    }),
  ],

  // 开发服务器配置
  devServer: {
    contentBase: path.join(__dirname, 'dist'), // 服务器的输出目录
    compress: true, // 启用 gzip 压缩
    port: 9000, // 端口号
    open: true, // 自动打开浏览器
  },

  // 优化配置
  optimization: {
    moduleIds: 'deterministic', // 确定性的模块 ID
    runtimeChunk: 'single', // 为每个入口创建一个运行时文件
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chunks: 'all',
        },
      },
    },
  },

  // 解析配置
  resolve: {
    extensions: ['.js', '.json', '.jsx', '.css'], // 自动解析确定的扩展
    alias: {
      '@': path.resolve(__dirname, 'src/'), // 设置路径别名
    },
  },
};

三、问题记录

3.1、node版本低的问题

npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
npm WARN deprecated core-js@1.2.7: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
npm ERR! Windows_NT 10.0.22631
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install"
npm ERR! node v6.0.0
npm ERR! npm  v3.8.6
  • 警告: core-js 被弃用
  • 错误: Node.js 版本过低

3.2、node-sass问题

直接在package.json中删除这个包,node-sass包在webpack4和webpack5中被sass-loader代替了

npm error gyp ERR! find Python
npm error gyp ERR! configure error
npm error gyp ERR! stack Error: Could not find any Python installation to use
npm error gyp ERR! stack     at PythonFinder.fail (D:\Program\Vue\WebGlobe\node_modules\node-gyp\lib\find-python.js:330:47)
npm error gyp ERR! stack     at PythonFinder.runChecks (D:\Program\Vue\WebGlobe\node_modules\node-gyp\lib\find-python.js:159:21)
npm error gyp ERR! stack     at PythonFinder.<anonymous> (D:\Program\Vue\WebGlobe\node_modules\node-gyp\lib\find-python.js:228:18)
npm error gyp ERR! stack     at PythonFinder.execFileCallback (D:\Program\Vue\WebGlobe\node_modules\node-gyp\lib\find-python.js:294:16)
npm error gyp ERR! stack     at exithandler (node:child_process:430:5)
npm error gyp ERR! stack     at ChildProcess.errorhandler (node:child_process:442:5)
npm error gyp ERR! stack     at ChildProcess.emit (node:events:518:28)
npm error gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
npm error gyp ERR! stack     at onErrorNT (node:internal/child_process:483:16)
npm error gyp ERR! stack     at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
npm error gyp ERR! System Windows_NT 10.0.22631
npm error gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "D:\\Program\\Vue\\WebGlobe\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm error gyp ERR! cwd D:\Program\Vue\WebGlobe\node_modules\node-sass
npm error gyp ERR! node -v v20.18.1
npm error gyp ERR! node-gyp -v v8.4.1
npm error gyp ERR! not ok
npm error Build failed with error code: 1
npm error A complete log of this run can be found in: C:\Users\bq\AppData\Local\npm-cache\_logs\2024-12-25T05_23_16_951Z-debug-0.log

3.3、webpack版本低的问题

Module build failed: ModuleBuildError: Module build failed: TypeError: this.getOptions is not a function
    at Object.loader (D:\Program\Vue\WebGlobe-develop\node_modules\sass-loader\dist\index.js:19:24)
    at runLoaders (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\lib\NormalModule.js:195:19)
    at D:\Program\Vue\WebGlobe-develop\node_modules\loader-runner\lib\LoaderRunner.js:367:11
    at D:\Program\Vue\WebGlobe-develop\node_modules\loader-runner\lib\LoaderRunner.js:233:18
    at process._tickCallback (internal/process/next_tick.js:68:7)

错误 TypeError: this.getOptions is not a function 通常是由于 sass-loader 的版本和 Webpack 版本不兼容导致的。具体来说,sass-loader 9.x 版本之前不支持 Webpack 5 使用的 this.getOptions() 方法,可能是你的 Webpack 版本较高,而 sass-loader 的版本较低。

  • 如果你使用的是 Webpack 5,那么需要使用 sass-loader 10.x 或更高版本。
  • 如果你使用的是 Webpack 4 或更低版本,则应该使用 sass-loader 9.x 版本或更低版本

3.4、webpack版本以及插件不兼容问题

TypeError: compilation.mainTemplate.applyPluginsWaterfall is not a function
    at D:\Program\Vue\WebGlobe-develop\node_modules\html-webpack-plugin\lib\compiler.js:81:51
    at compile (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\lib\Compiler.js:343:11)
    at hooks.afterCompile.callAsync.err (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\lib\Compiler.js:681:15)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\node_modules\tapable\lib\Hook.js:154:20)
    at compilation.seal.err (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\lib\Compiler.js:678:31)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\node_modules\tapable\lib\Hook.js:154:20)
    at hooks.optimizeAssets.callAsync.err (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\lib\Compilation.js:1423:35)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\node_modules\tapable\lib\Hook.js:154:20)
    at hooks.optimizeChunkAssets.callAsync.err (D:\Program\Vue\WebGlobe-develop\node_modules\webpack\lib\Compilation.js:1414:32)
  • compilation.mainTemplate.applyPluginsWaterfall is not a function 错误表明 Webpack 在尝试调用 mainTemplate.applyPluginsWaterfall 方法时,未找到该方法。这意味着 Webpack 版本可能不再支持或已经移除了该方法,或者相关插件在新版本中存在兼容性问题。
  • applyPluginsWaterfall 方法在 Webpack 5 中已被移除。在 Webpack 5 中,插件 API 做了一些改动,很多以前的方法都被移除或替换。因此,如果你的项目依赖于 Webpack 5 或更高版本,而插件仍使用了 Webpack 4 中的方法,就可能会发生这种错误。

3.5、- -colors问题

在webpack5中,一些命令行选项已经发生了变化,包括–colors选项。这个选项在webpack5中已经被移除,因为webpack5默认就会输出带有颜色的信息。

[webpack-cli] Error: Unknown option '--colors'
[webpack-cli] Run 'webpack --help' to see available commands and options

在package.json文件中直接去除掉--colors即可,如下

"scripts": {
  "clean": "rimraf buildOutput && rimraf index.html",
  "prebuild:dev": "npm run clean",
  "build:dev": "cross-env NODE_ENV=development webpack --progress",
  "prebuild:prod": "npm run clean",
  "build:prod": "cross-env NODE_ENV=production webpack --progress",
  "start": "cross-env NODE_ENV=development webpack serve --open --progress",
  "test": "cross-env NODE_ENV=development webpack --progress"
}

3.6、node-sass 的问题

由于 node-sass 使用了一个本地的二进制文件来编译 Sass,这可能会导致一些平台上的兼容性问题。为了应对这一问题,Sass 官方推荐使用 sass(即 Dart Sass)作为更现代和稳定的替代方案。sass 是基于 Dart 编程语言实现的 Sass 编译器,且不依赖本地二进制文件,更易于跨平台使用。

3.7、lib.dom.d.ts中没有layerX属性的问题

lib.dom.d.ts 文件是 TypeScript 提供的标准 DOM 类型声明文件,包含了浏览器中的 DOM API 的类型定义。关于 layerX 属性,它是一个用于旧版浏览器中的鼠标事件属性,指示鼠标相对于事件目标的水平坐标。该属性在现代浏览器中已经被弃用,并被更为标准的 clientX 和 pageX 等属性所取代。

3.8、wheelDelta 已废弃问题

TS2339: Property 'wheelDelta' does not exist on type 'WheelEvent'.
  • wheelDelta 是一个已弃用的属性,最初用于在旧版浏览器(如 Internet Explorer 和早期版本的 Chrome 和 Firefox)中获取鼠标滚轮的滚动量。它的标准替代品是 Y(或者 X 和 Z,用于横向和纵向滚动),这些属性是现代浏览器所支持的。
  • wheelDelta 已废弃:wheelDelta 在现代浏览器中不再使用。它被 X 和 Y 等标准化属性取代,符合 W3C 规范。TypeScript 的 DOM 类型定义已经不再包含 wheelDelta,因此出现了 TS2339 错误。

3.9、esModule配置问题

esModule 选项: 这个选项控制 Lodash 是否使用 ES6 模块导出方式。启用 esModule 时,Lodash 会尝试使用 ES6 模块系统的特性(如 export 和 import),而不是 CommonJS 的 module.exports。

Error: 
        To support the 'esModule' option, the 'variable' option must be passed to avoid 'with' statements
        in the compiled template to be strict mode compatible. Please see https://github.com/lodash/lodash/issues/3709#issuecomment-375898111.
        To enable CommonJS, please set the 'esModule' option to false.

在你的 Webpack 项目中使用 Node.js 时,是否启用 esModule 选项取决于你希望如何使用模块和打包方式。一般来说,esModule 和 CommonJS 都有不同的语法和模块导出方式,选择是否启用 esModule 取决于以下几个因素:

  1. 使用 ES6 模块语法 (ESM)
    如果你在项目中使用的是 ES6 模块语法,比如 import 和 export,你可能会希望启用 esModule,因为这会确保 Lodash 或其他库按照 ES6 模块的标准进行导出和导入。
  2. 使用 CommonJS 模块语法
    如果你在项目中主要使用 CommonJS 模块语法,比如使用 require() 和 module.exports,那么你应该考虑 禁用 esModule 选项,因为启用后可能会导致与 CommonJS 语法的兼容性问题。
  3. Webpack 默认行为
    Webpack 默认会处理模块并将它们转换为兼容浏览器的格式,通常 Webpack 会根据你的代码和目标环境自动决定是否使用 CommonJS 或 ESM。大多数情况下,Webpack 会将模块转为兼容的格式(比如在浏览器中会使用 ESM 模块,在 Node.js 环境中则可以使用 CommonJS)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

plsql :用户system通过sysdba连接数据库--报错ora-01031

一、winR cmd通过命令窗口登录sys用户 sql sys/[password]//localhost:1521/[service_name] as sysdba二、输入用户名:sys as sysdba 三、输入密码:自己设的 四、执行grant sysdba to system; 再去PL/SQL连接就可以了

Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读

文章信息&#xff1a; 原文链接&#xff1a;https://arxiv.org/abs/2412.18298 Abstract 视频异常检测&#xff08;VAD&#xff09;通过整合大语言模型&#xff08;LLMs&#xff09;和视觉语言模型&#xff08;VLMs&#xff09;取得了显著进展&#xff0c;解决了动态开放世界…

药片缺陷检测数据集,8625张图片,使用YOLO,PASICAL VOC XML,COCO JSON格式标注,可识别药品是否有缺陷,是否完整

药片缺陷检测数据集&#xff0c;8625张图片&#xff0c;使用YOLO&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式标注&#xff0c;可识别药品是否有缺陷&#xff0c;是否完整 有缺陷的标注信息&#xff1a; 无缺陷的标注信息 数据集下载&#xff1a; yolov11:https://d…

蓝桥杯速成教程{三}(adc,i2c,uart)

目录 一、adc 原理图​编辑引脚配置 Adc通道使能配置 实例测试 ​编辑效果显示 案例程序 badc 按键相关函数 测量频率占空比 main 按键的过程 显示界面的过程 二、IIC通信-eeprom 原理图AT24C02 引脚配置 不可用状态&#xff0c;用的软件IIC 官方库移植 At24c02手册 ​编辑…

第6章 图论

2024年12月25日一稿 &#x1f430;6.1 图的基本概念 6.1.1 图的定义和表示 6.1.2 图的同构 6.1.3 完全图与正则图 6.1.4 子图与补图 6.1.5 通路与回路 6.2 图的连通性 6.2.1 无向图的连通性 6.2.2 有向图的连通性 6.3 图的矩阵表示 6.3.1 关联矩阵 6.3.2 有向图的邻接矩阵…

数据库原理及应用(MySQL版-李月军)-习题参考答案

数据库原理及应用&#xff08;MySQL版&#xff09;-微课视频版 习题参考答案 习 题一 一&#xff0e;选择题 1、D 2、C 3、C 4、B 5、D 6、B 7、A 8、B 9、C 10、A 11、B 12、C 13、①A②B③C 14、①E②B 15、①B②C③B 16、B 17、A 18、D 二&#xff0e;填空题 1、文件…

从家谱的层级结构 - 组合模式(Composite Pattern)

组合模式&#xff08;Composite Pattern&#xff09; 组合模式&#xff08;Composite Pattern&#xff09;组合模式概述组合模式涉及的角色talk is cheap&#xff0c; show you my code总结 组合模式&#xff08;Composite Pattern&#xff09; 组合模式&#xff08;Composite…

路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度

何在路由器上设置代理服务器&#xff1f; 如何在路由器上设置代理服务器&#xff1f; 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择&#xff0c;特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤&#xff0c;使用路由器…

免费干净!付费软件的平替款!

今天给大家介绍一个非常好用的电脑录屏软件&#xff0c;完全没有广告界面&#xff0c;非常的干净简洁。 电脑录屏 无广告的录屏软件 这个软件不需要安装&#xff0c;打开就能看到界面直接使用了。 软件可以全屏录制&#xff0c;也可以自定义尺寸进行录制。 录制的声音选择也非…

Pandas03

Pandas01 Pandas02 文章目录 内容回顾1 排序和统计函数2 缺失值处理2.1 认识缺失值2.2 缺失值处理- 删除2.3 缺失值处理- 填充非时序数据时序数据 3 Pandas数据类型3.1 数值类型和字符串类型之间的转换3.2 日期时间类型3.3 日期时间索引 4 分组聚合4.1 分组聚合的API使用4.2 分…

vue3使用element-plus,解决 el-table 多选框,选中后翻页再回来选中失效问题

问题&#xff1a;勾选的数据分页再回来回消失 1.在el-table中加 :row-key"getRowKey" const getRowKey (row) > { return row.id; // id必须是唯一的 }; 2.给type为selection的el-table-column添加上reserve-selection属性 <el-tableref"multipleTab…

BUU BRUTE 1

BUU BRUTE 1 启动靶机 让我们输入账户和密码&#xff0c;这里我们什么也不知道就随便输入一个试试 账户adimin密码1234 告诉我们密码错误&#xff0c;为四位数字&#xff0c;在这里没有说账号错误&#xff0c;说明账号就是admin 密码的话爆破一下从0000到9999 这里选择默认的…

Maple软件的安装和使用

文章目录 1.前言说明2.我为什么要学习Maple3.软件的安装4.如何使用4.1基本的赋值语句4.2函数的定义4.3三个类型的书写介质 5.指数运算5.1使用面板5.2自己输入 6.对数的使用 1.前言说明 众所周知&#xff0c;我虽然是一名这个计算机专业的学生&#xff0c;但是我对于数学&#…

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…

javaEE-多线程案例-单例模式

目录 啥是设计模式? 一.饿汉式 实现步骤&#xff1a; 二.懒汉式 实现步骤: 三、懒汉式优化1 四.懒汉式优化2 五.懒汉式优化3 总代码: 单例模式是一种设计模式。 啥是设计模式? 设计模式好⽐象棋中的"棋谱".红⽅当头炮,⿊⽅⻢来跳.针对红⽅的⼀些⾛法,⿊…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

鸿蒙开发实战之“使用HiLog和HiSysEvent进行日志与系统事件管理”

HiLog和HiSysEvent作为鸿蒙&#xff08;HarmonyOS&#xff09;系统中进行日志记录和系统事件管理的关键组件&#xff0c;为开发者提供了强大的工具来追踪系统行为、调试应用以及监控设备状态。它们不仅简化了日志管理和事件追踪的流程&#xff0c;还提高了开发效率和系统可维护…

机器学习之PCA降维

主成分分析&#xff08;PCA&#xff0c;Principal Component Analysis&#xff09; 主成分分析&#xff08;PCA&#xff09;是一种常见的无监督学习技术&#xff0c;广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间…

【CSS in Depth 2 精译_098】17.3:CSS 动画延迟技术与填充模式设置 + 17.4:通过 CSS 动画传递意图的秘诀

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 17 章 动画】 ✔️ 17.1 关键帧17.2 3D 变换下的动画设置 17.2.1 添加动画前页面布局的构建17.2.2 为布局添加动画 17.3 动画延迟与填充模式 ✔️17.4 通过动画传递意图…

python+PyMuPDF库:(一)创建pdf文件及内容读取和写入

目录 文档操作 打开文档 获取文档信息 删除页 复制页 移动页 选择重构合并 保存关闭 页对象操作 内容读取 获取页对象的字体样式 插入文本标签 插入文本内容 字体设置 insert_text添加文本 insert_textbox添加文本 插入图片 获取页面注释、链接、表单字段 …