重大变化:webpack < 5 用于默认包含 node.js 核心模块的 polyfill

Posted

技术标签:

【中文标题】重大变化:webpack < 5 用于默认包含 node.js 核心模块的 polyfill【英文标题】:BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default 【发布时间】:2021-09-13 06:41:03 【问题描述】:

我正在尝试在我的 Laravel/Vue.js 应用程序中使用 Socket.io。但是在运行npm run dev 时出现此错误。

Module not found: Error: Can't resolve 'path' in '/home/nicolas/LaravelProjects/Chess/node_modules/socket.io/dist'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
    - add a fallback 'resolve.fallback:  "path": require.resolve("path-browserify") '
    - install 'path-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
    resolve.fallback:  "path": false 

webpack compiled with 9 errors

我尝试通过添加 resolve.fallback: "path": false 来更改 webpack.config.js 文件,但它似乎没有帮助。我可能做错了,因为我的项目中有 4 个 webpack.config.js 文件(我不知道为什么)。

也许我可以降级 webpack?谢谢!

【问题讨论】:

这是我的解决方案***.com/a/69345147/13329849 Laravel mix 已导入 app.js 【参考方案1】:

我对加密也有同样的问题。有人说在 TS 配置中添加正确的路径(并安装 polyfill)应该可以解决问题。

tsconfig.json

  "compilerOptions": 
    "paths": 
      "crypto": [
        "./node_modules/crypto-browserify"
      ],

详情https://github.com/angular/angular-cli/issues/20819

我仍在与加密货币作斗争,但上面的链接可能有助于你的斗争。

【讨论】:

就我而言,我不得不迁移到 crypto-es 库。我从来没有克服过最初的错误。【参考方案2】:

我在 ReactJS 中使用 create-react-app(facebook) 遇到了这个问题,但其他包(crypto-browserify)

解决方案:

    首先在这个问题“path-browserify”中安装必要的包,但在我的情况下是“crypto-browserify”

    用 create-react-app 修改 reactjs 中的 webpack.config.js 这个文件在里面:

node_modules/react-scripts/config/webpack.config.js

搜索module.exports,在这个函数里面有一个返回:
module.exports = function (webpackEnv) 
  ...
  return 
   ...
    resolve: 
      ...
      fallback: 
        // Here paste
        path: require.resolve("path-browserify"),
        // But in mi case I paste
        crypto: require.resolve("crypto-browserify"),

      
    
  

注意:此解决方案有效,但当 webpack 项目启动时会显示警告

Pd:我的母语不是英语,但我希望能理解我。

【讨论】:

【参考方案3】:

我终于找到了解决办法。使用 laravel,您必须更改 webpack.mix.js 文件而不是 webpack.config.js。

【讨论】:

对你有好处,但我什至没有使用 lavarel js,它用这个无意义的错误破坏了一切。【参考方案4】:

我遇到了同样的问题,奇怪的是我的 app.js 中的一个 import script from 'laravel-mix'。我删除了它,一切都恢复正常了。

【讨论】:

以上是关于重大变化:webpack < 5 用于默认包含 node.js 核心模块的 polyfill的主要内容,如果未能解决你的问题,请参考以下文章

重大位置更改不适用于仅 Wifi 的设备

什么语义版本说明当引入重大变化时,但过去已经引入了一个主要版本?

Npm 包样式不适用于类

Solr各个版本重大变化之安装方式请别违背规律

手把手教你打包代码----webpack

Angular 6 和 RxJS 6 重大变化