【发布时间】: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
遇到了一个找不到 stompJS-lib 的问题,我收到以下错误消息:
Module not found: Error: Can't resolve 'net' in '/../../../.../../../angular-app/node_modules/stompjs/lib'
【问题讨论】:
标签: angular npm webpack next.js
以下命令(安装缺少的依赖项):
npm i net -S
这不会像下面假设的那样安装随机包。如果您希望前端在这些所需依赖项的客户端上进行某种级别的非权威处理,那么这是可以考虑的选项。
【讨论】:
为避免安装随机包,您可以将其添加到您的 Webpack 配置中。
node: {
net: 'empty',
},
这个问题是由于预期 net 包是 Node.JS 的一个包,并且在浏览器中不存在。
如果您想了解更多信息和解释,可以找到here。
【讨论】:
为了对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
【讨论】:
/pages/api/my-endpoint-service.ts)并将其视为代理 API。它带来了 API 调用的好处,我也更加安全,因为这样您就无法在浏览器中看到 API URL 或 API 密钥。
webpack v5(添加到 module.exports 中的 webpack.config.js):
resolve: {
fallback: {
net: false
}
},
【讨论】:
如果您使用 Laravel,请执行以下操作:
安装:
npm install util browserify-fs tls-browserify net-browserify stream-http https-browserify path-browserify crypto-browserify stream-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"), “流”: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
}
}
【讨论】:
那是因为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 目标参数:
-t, --target <value...> Sets the build target e.g. node.
【讨论】:
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
【讨论】: