Webpack 无法解析 Node.js 模块

Posted

技术标签:

【中文标题】Webpack 无法解析 Node.js 模块【英文标题】:Webpack cannot resolve Node.js modules 【发布时间】:2021-05-21 16:39:28 【问题描述】:

Webpack 无法解析核心 Node.js 模块

我知道这不是这里唯一与 Webpack 相关的 Node.js 模块查询,但是当应用我在其他地方读到的解决方案时,另一个核心模块似乎正在导致另一个 ReferenceError。

我有一个 index.js 文件,它需要 Crypto module 将哈希记录到控制台:

index.js

const crypto = require('crypto')

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
                   .update('I love cupcakes')
                   .digest('hex');
console.log(hash);

在设置我的 webpack.congif.js 文件时,我得到了这个错误:

重大变化:webpack

添加回退 'resolve.fallback: "crypto": require.resolve("crypto-browserify") ' 安装“加密浏览器”

遵循上述指导后,我在“buffer”和“stream”模块中遇到了同样的错误,为了编译配置文件,我添加了回退语句并安装了相关模块以覆盖这些缺失的依赖项:

webpack.config.js

const path = require('path');

module.exports = 
    mode: 'development',
    node: 
        global: true,
    ,
    resolve: 
        fallback:  
            "crypto": require.resolve("crypto-browserify"),
            "buffer": require.resolve("buffer/"),
            "stream": require.resolve("stream-browserify")
        
    ,
    entry: './src/index.js',
    output: 
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
    ,
;

Webpack.config 现在可以编译,但是当我在浏览器中运行 index.html 时,我在浏览器控制台中收到以下错误:

未捕获的引用错误:未定义进程

正如 'Breaking Change' 错误中所述,Webpack 5 不再为节点核心模块添加 polyfill,但这是否意味着每个节点模块都需要一个 polyfill,然后才能运行节点脚本?

【问题讨论】:

【参考方案1】:

尝试使用process/browser polyfill。把它放到你的webpack.config.js

resolve: 
  alias: 
    process: "process/browser"
  ,
  ...


【讨论】:

恐怕我仍然收到同样的错误信息。对“过程”的引用应该用引号括起来吗? @Tee-Poe,是同样的错误吗?除非是 json,否则不需要关键引号,但它们永远不会受到伤害。

以上是关于Webpack 无法解析 Node.js 模块的主要内容,如果未能解决你的问题,请参考以下文章

SaxonJS 无法与 webpack 一起使用

Webpack:无法解析模块“文件加载器”

Webpack 无法解析模块

webpack中的eslint导入:无法解析模块的路径

未找到模块:错误:无法使用 Webpack 解析“fs”

找不到模块:错误:无法解析模块“组件/应用程序”。 webpack + reactjs 问题