Module not found: Error: Can't resolve 'net' in 'node_modules/stompjs/lib'

Module not found: Error: Can't resolve 'net' in 'node_modules/stompjs/lib'

遇到找不到 stompJS-lib 的问题,我收到以下错误消息:

Module not found: Error: Can't resolve 'net' in '/../../../.../../../angular-app/node_modules/stompjs/lib'

以下命令(安装缺少的依赖项):

 npm i net -S

这不会像下面假设的那样安装随机包。如果您希望前端在客户端对这些必需的依赖项进行某种级别的非权威处理,那么这是要考虑的选项。

为避免安装随机包,您可以将其添加到您的 Webpack 配置中。

node: {
  net: 'empty',
},

此问题是由于期待 net 包引起的,该包来自 Node.JS,但在浏览器中不存在。

如果您需要更多信息和解释,可以找到它here

ERROR in ./node_modules/@google/maps/node_modules/https-proxy-agent/index.js
Module not found: Error: Can't resolve 'net' in 'C:\.....\...\node_modules\@google\maps\node_modules\https-proxy-agent'
ERROR in ./node_modules/@google/maps/node_modules/https-proxy-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'C:\...\....\node_modules\@google\maps\node_modules\https-proxy-agent'

这可以通过安装解决: npm i tls -S 然后安装 npm i net -S

扩展一下 ,如果您使用的是 NextJS,则可以在配置文件中添加配置以防止特定导入出现此问题。

将这些行添加到根项目文件夹中名为 next.config.js 的文件中:

module.exports = {
    webpack: (config, { isServer }) => {
        if (!isServer) {
            config.node = {
                net: 'empty'
            };
        }

        return config;
    }
}

如果其他内置模块出现问题,您也可以将它们添加到 net 旁边。

来源:https://github.com/vercel/next.js/issues/7755#issuecomment-508633125

那是因为Net是NodeJS的一部分,所以它不存在于浏览器中。 https://nodejs.org/api/net.html#net_net

更好地更新您的 Webpack 配置

node: {
  net: 'empty',
},

webpack v5(添加到module.exports中的webpack.config.js):

resolve: {
    fallback: {
        net: false
    }
},

如果您使用的是 Laravel,请执行以下操作:

  1. 安装:

    npm 安装 util browserify-fs tls-browserify net-browserify stream-http https-browserify path-browserify crypto-browserify stream-browserify browserify-zlib os-browserify

  2. 将此包含在 Webpack.mix.js 中:

    mix.webpackConfig({ 解决: { 倒退: { "child_process": 'empty', "fs": require.resolve("browserify-fs"), “实用程序”:require.resolve(“实用程序”), "http": require.resolve("stream-http"), "https": require.resolve("https-浏览器化"), "tls": require.resolve("tls-browserify"), "net": require.resolve("net-browserify"), “加密”:require.resolve(“加密浏览器化”), “路径”:require.resolve(“路径浏览器化”), "os": require.resolve("os-浏览器化"), "stream": require.resolve("stream-browserify"), “zlib”:require.resolve(“browserify-zlib”) } } });

如果您不使用 Laravel,请将其包含在:Webpack.config.js 或您的 Webpack 配置文件中。

resolve: {
    fallback: {
        "child_process": 'empty', 
        "fs": require.resolve("browserify-fs"), 
        "util": require.resolve("util"), 
        "http": require.resolve("stream-http"),
        "https": require.resolve("https-browserify"),
        "tls": require.resolve("tls-browserify"),
        "net": require.resolve("net-browserify"),
        "crypto": require.resolve("crypto-browserify"), 
        "path": require.resolve("path-browserify"),
        "os": require.resolve("os-browserify"), 
        "stream": require.resolve("stream-browserify"),
        "zlib": require.resolve("browserify-zlib")
    }
}

为什么?

别生他的气,他只想知道怎么处理,你需要注明各自的模块或者设置成'false'。

如果您知道这不能解决问题,您可以回滚安装:

npm remove util browserify-fs tls-browserify net-browserify stream-http https-browserify path-browserify crypto-browserify stream-browserify browserify-zlib os-browserify

备选

resolve: {
    fallback: {
        "child_process": false, 
        "process":  false, 
        "fs": false, 
        "util": false, 
        "http": false,
        "https": false,
        "tls": false,
        "net": false,
        "crypto": false, 
        "path": false,
        "os": false, 
        "stream": false,
        "zlib": false
    }
}

要扩展现有答案,特别是 stompjs,如果您只在浏览器环境中需要它,那么您可以使用基础 stomp.js - 它会 运行 在浏览器中就好了。它位于 /node_modules/stompjs/lib/stomp.js.

因此,将此别名添加到您的 webpack 配置中即可解决问题,而无需将特定节点依赖项列入黑名单。

resolve: {
    alias: {
        'stompjs': __dirname + '/node_modules' + '/stompjs/lib/stomp.js',
    }
}

这不是对原始问题的直接回答,但对于那些从搜索中遇到类似问题并正在打包服务器端(或用户区)应用程序的人来说,这些应用程序是 运行 节点。正确的解决方案是使用节点目标参数:

  -t, --target <value...>                Sets the build target e.g. node.