遇到找不到 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 的包,但浏览器中不存在。
如果您想了解更多信息和解释,可以在这里找到。
参考 Flavio Copes 的回答:
问题是这样的:Next.js 正在尝试在前端运行后端代码。
要扩展一下 Arthur Costa 的答案,如果您使用 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
webpack v5(添加到 module.exports 中的 webpack.config.js):
resolve: {
fallback: {
net: false
}
},
如果您使用像Next.js这样的框架,当某些服务器端代码暴露在客户端时,会出现类似的错误。有些依赖项只是 Node.js 的一部分。您不应该在存储库中运行类似
npm install net
的代码。并不能解决问题。
大多数时候你需要将服务器端和客户端代码分成2个不同的文件。
在服务器端代码文件的顶部,添加
'use server'
以避免意外将其导入到客户端代码文件。
如果您使用 Laravel,请执行以下操作:
安装:
npm install util browserify-fs tls-browserify net-browserify 流-http https-browserify 路径-browserify crypto-browserify 流-browserify browserify-zlib os-browserify
将其包含在 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"), "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
}
}
那是因为
Net
是NodeJS的一部分,所以它不存在于浏览器中。
https://nodejs.org/api/net.html#net_net
更好地更新您的 Webpack 配置
node: {
net: 'empty',
},
为了扩展现有的答案,特别是对于
stompjs
,如果您只需要在浏览器环境中使用它,那么您可以使用基本的 stomp.js
- 它会在浏览器中运行得很好。它位于/node_modules/stompjs/lib/stomp.js
。
因此,将此别名添加到您的 webpack 配置中即可解决该问题,而无需将特定节点依赖项列入黑名单。
resolve: {
alias: {
'stompjs': __dirname + '/node_modules' + '/stompjs/lib/stomp.js',
}
}
这不是原始问题的直接答案,但对于那些通过搜索来到这里并遇到类似问题并且正在打包使用 Node.js 运行的服务器端(或用户态)应用程序的人来说。正确的解决方案是使用 Node target 参数:
-t, --target <value...> Sets the build target e.g. node.
在 Nextjs 应用程序路由器中,当您从中导入使用服务器渲染的函数时,就会发生这种情况。因此,只需在函数文件中添加“use server”指令即可正常工作
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 我网-S