【问题标题】:Module not found: Error: Can't resolve 'net' in 'node_modules/stompjs/lib'找不到模块:错误:无法解析“node_modules/stompjs/lib”中的“net”
【发布时间】:2019-06-13 23:07:40
【问题描述】:

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

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

【问题讨论】:

    标签: angular npm webpack next.js


    【解决方案1】:

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

     npm i net -S
    

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

    【讨论】:

    • @alextes,您还有其他解决方案吗?请建议我面临同样的问题。
    • 假设您尝试在某些非 Node 运行时(例如浏览器)中运行需要在 Node 上运行的代码:找出需要 net.js 的代码。检查此错误。用没有的代码替换该代码。
    • 正确的是"net":require.resolve("net-browserify")。你必须安装'net-browserify'而不是'net',在我的回答中你有大部分。
    【解决方案2】:

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

    node: {
      net: 'empty',
    },
    

    这个问题是由于预期 net 包是 Node.JS 的一个包,并且在浏览器中不存在。

    如果您想了解更多信息和解释,可以找到here

    【讨论】:

      【解决方案3】:

      为了对Arthur Costa answer 进行一些扩展,如果您使用的是 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

      【讨论】:

      • 我的问题也在 Next.Js 应用程序上,我的解决方案是将代码移动到 Next.Js 的 API 层(例如/pages/api/my-endpoint-service.ts)并将其视为代理 API。它带来了 API 调用的好处,我也更加安全,因为这样您就无法在浏览器中看到 API URL 或 API 密钥。
      • @BradGreens 你介意添加它作为这个问题的替代解决方案吗?
      • 谢谢。并且您可能会添加到那些新使用 NextJs 的人。他们需要在编辑配置时重新启动他们的应用程序。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        1. 安装:

          npm install 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": '空', "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"), “路径”:require.resolve(“路径浏览器”), "os": require.resolve("os-browserify"), “流”:require.resolve(“流浏览器”), "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
            }
        }
        

        【讨论】:

          【解决方案6】:

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

          更好地更新你的 Webpack 配置

          node: {
            net: 'empty',
          },
          

          【讨论】:

            【解决方案7】:

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

            所以,将这个别名添加到你的 webpack 配置中就可以解决这个问题,而无需将特定的节点依赖列入黑名单。

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

            【讨论】:

              【解决方案8】:

              这不是对原始问题的直接答案,而是针对那些从搜索中遇到类似问题并正在打包使用 Node.js 运行的服务器端(或用户空间)应用程序的人。正确的解决方法是使用 Node 目标参数:

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

              【讨论】:

                【解决方案9】:
                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

                【讨论】:

                  猜你喜欢
                  • 2021-01-30
                  • 1970-01-01
                  • 2021-02-20
                  • 2019-10-16
                  • 2021-02-21
                  • 2022-08-07
                  • 2017-10-08
                  • 2021-01-12
                  • 2017-03-31
                  相关资源
                  最近更新 更多