注意:对于支持问题,请使用以下渠道之一: stackoverflow或slack
我从 socket.io 的 master 分支下载了示例项目webpack-build-server ,运行npm install
来安装依赖项,最后运行npm run build
来尝试捆绑服务器,但是 webpack 给了我以下错误:
ERROR in ./~/engine.io/lib/server.js
Module not found: Error: Can't resolve 'uws' in '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib'
@ ./~/engine.io/lib/server.js 107:27-41
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js
examples/webpack-build-server
;npm install
;npm run build
;注意:获得快速答案的最佳方法是提供失败的测试用例,例如通过分叉以下小提琴。
应在dist
文件夹中生成 server.js 文件。
这些是我的终端上打印的内容
````
[email protected] build /Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server
webpack --config ./support/webpack.config.js
哈希:997a1fd1ee0b1b064485
版本:webpack 2.7.0
时间:468ms
资产大小块块名称
server.js 401 kB 0 [发出] [大] 主要
[0] ./~/debug/src/index.js 263 字节 {0} [内置]
[7] ./~/socket.io-parser/index.js 8.04 kB {0} [内置]
[16] ./~/engine.io/lib/socket.js 11.6 kB {0} [内置]
[17] ./~/engine.io/lib/transports/index.js 509 字节 {0} [内置]
[19] ./~/socket.io-parser/is-buffer.js 712 字节 {0} [内置]
[20] ./~/socket.io/lib/namespace.js 5.81 kB {0} [内置]
[31] ./~/socket.io/lib/index.js 12.9 kB {0} [内置]
[32] ./lib/index.js 474 字节 {0} [内置]
[43] ./~/engine.io/lib/engine.io.js 2.38 kB {0} [内置]
[44] ./~/engine.io/lib/server.js 15.1 kB {0} [内置]
[58] ./~/socket.io-adapter/index.js 5.44 kB {0} [内置]
[59] ./~/socket.io-client/package.json 3.19 kB {0} [内置]
[61] ./~/socket.io/lib 160 字节 {0} [内置]
[62] ./~/socket.io/lib/client.js 5.9 kB {0} [内置]
[63] ./~/socket.io/lib/parent-namespace.js 917 字节 {0} [内置]
+ 59 个隐藏模块
./~/ws/lib/Validation.js 中的警告
找不到模块:错误:无法解析“/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib”中的“utf-8-validate”
@ ./~/ws/lib/Validation.js 10:22-47
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js
./~/ws/lib/BufferUtil.js 中的警告
找不到模块:错误:无法解析“/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib”中的“bufferutil”
@ ./~/ws/lib/BufferUtil.js 35:21-42
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js
./~/socket.io/lib/index.js 中的警告
113:11-32 关键依赖:依赖的请求是一个表达式
./~/engine.io/lib/server.js 中的错误
找不到模块:错误:无法解析“/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib”中的“uws”
@ ./~/engine.io/lib/server.js 107:27-41
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js
npm 错误! 代码生命周期
npm 错误! 错误号 2
npm 错误! [email protected]构建: webpack --config ./support/webpack.config.js
npm 错误! 退出状态 2
npm 错误!
npm 错误! 在[email protected]构建脚本中失败。
npm 错误! 这可能不是 npm 的问题。 上面可能有额外的日志输出。
npm 错误! 可以在以下位置找到此运行的完整日志:
npm 错误! /Users/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````
我手动安装uws
包,它似乎工作。 有人可以更新 README 文件或 package.json,因为像我这样的初学者真的很难弄清楚这一点。
我也收到同样的警告:
WARNING in ./~/ws/lib/BufferUtil.js
Module not found: Error: Can't resolve 'bufferutil' in '/Users/Ian/Code/ianpaschal/forge-server/node_modules/ws/lib'
@ ./~/ws/lib/BufferUtil.js 35:21-42
@ ./~/ws/lib/Sender.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./src/server.js
WARNING in ./~/ws/lib/Validation.js
Module not found: Error: Can't resolve 'utf-8-validate' in '/Users/Ian/Code/ianpaschal/forge-server/node_modules/ws/lib'
@ ./~/ws/lib/Validation.js 10:22-47
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./src/server.js
WARNING in ./~/socket.io/lib/index.js
113:11-32 Critical dependency: the request of a dependency is an expression
// package.json
"webpack": "^2.7.0",
"socket.io": "^2.1.0",
你设法解决了吗? 有同样的问题。。
没有。 这只是一个警告,所以除了丑陋的控制台输出之外没有任何影响,但它仍然存在。
它不会阻止你npm start
,只是忽略错误。
如果你只为node编译,你应该添加选项然后错误就会消失。
您应该添加到您的配置文件:
{
...
target: 'node'
...
}
否则,您只为web进行编译,则不需要传递任何选项 (default='web') (或 target='web'),但您应该将 'uws' 排除在捆绑之外,因为它在浏览器。
在这种情况下,您应该添加:
{
...
externals: {
uws: "uws"
},
...
}
@pirix-gh 这似乎不是问题。
从我的配置:
const Webpack = require( "webpack" );
module.exports = {
target: "node",
node: {
__dirname: true,
__filename: true,
},
entry: {
main: "./src/server.js",
},
plugins: [
new Webpack.EnvironmentPlugin( [
"NODE_ENV",
] ),
new Webpack.IgnorePlugin( /uws/ )
],
};
@ianpaschal好的,那么也许您正在将一个项目导入另一个项目?
_项目_1_
_项目_2_
Webpack:编译 Project_2
-> 在 Project_2 中找不到模块
这可能会发生,因为在 Project_2 中查找了依赖项,但 Project_1 持有它。
解决方案是像您一样安装缺少的依赖项。
或发布您的 Project_1,然后将其作为依赖项导入 Project_2。
通过这样做,我能够重现您在上面提供的错误
感谢您解释错误的原因,并提供替代方法!
@Zehua-Chen 很高兴,希望它能解决您的问题。 我知道一直发布是多么烦人,所以......对于这种拆分项目的情况,您可以在开发过程中使用:
npx @babel/node src/index.js
或node -r @babel/register src/index.js
或取决于您的版本
npx babel-node src/index.js
或node -r babel-register src/index.js
它将正确解决依赖关系并运行,但请记住它不适合生产。
如果你在生产中工作,你应该单独发布你的包并使用 npm 代替。
我现在做了很多研究,但仍然不明白这个问题以及如何解决它。
我有一个项目,使用 socket.io 并使用 webpack 构建总是失败并出现同样的问题。
ERROR in ./node_modules/engine.io/lib/server.js
Module not found: Error: Can't resolve 'uws' in 'xxxxxxxx/node_modules/engine.io/lib'
@ ./node_modules/engine.io/lib/server.js 107:27-41
@ ./node_modules/engine.io/lib/engine.io.js
@ ./node_modules/socket.io/lib/index.js
包.json
"dependencies": {
"express": "^4.16.3",
"socket.io": "^2.1.1"
},
"devDependencies": {
"tslint": "^5.11.0",
"typescript": "2.9.2",
"uglifyjs-webpack-plugin": "^1.2.7",
"webpack": "^4.16.4",
"webpack-cli": "^3.1.0"
},
webpack.config.js
const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
target: 'node',
mode: 'development',
entry: './dist/index.js',
output: {
filename: 'index.js',
path: path.resolve(__dirname, 'dist/00-bundle')
},
optimization: {
minimizer: [
new UglifyJsPlugin()
]
}
};
@btxtiger这是因为您在使用节点时不能捆绑您的依赖项(将与 package.json 一起安装)。 这是webpack 的默认行为,因为它为web捆绑了您的项目。
将此添加到您的 conf,它将通过阅读您的package.json排除您的依赖项
const nodeExternals = require('webpack-node-externals');
module.exports = {
...
mode: 'development',
...
externals: [nodeExternals({
modulesFromFile: true
})];
...
}
这样,您将获得(几乎)一个可发布的包
@pirix-gh 谢谢! 好吧,这是有道理的。 我希望能够创建一个完整的包,只需将其推送到服务器,而无需通过 package.json 安装/更新模块。 我仍然不确定这是否真的不可能,除了 socket.io 的错误,它似乎可以工作。
@btxtiger您可以在本地执行此操作。 只是不要在 NPM 上发布它,因为它违反了依赖规则。
uws 是在使用npm i
时动态编译的,因为它是一个包含在 Node.js 中的 C++ 模块。
所以它不能像标准 js 那样捆绑,而是必须安装(这会触发你的操作系统的编译)。
这就是为什么你应该总是使用 NPM依赖系统,然后你就不必问自己这个问题了。
如果你还想这样做,尝试排除 uws:
{
...
externals: {
uws: "uws"
},
...
}
@pirix-gh 太好了,非常感谢您的解释。 我搬到了一个优化的 package.json,它在使用 webpack 构建时排除了所有开发依赖项,并且总是在开始之前运行 npm install 。 似乎是目前最好的解决方案。
我没有时间完全调试它,但是当从karma^2.0.0
升级到karma^3.0.0
时,我在 webpack 构建中遇到了这个错误:
Module not found: Error: Can't resolve 'uws'
因此,将 Karma 保持在2.0.0
是我的解决方案。
每当我导入或需要 socket.io 时,我都会遇到这个问题。 我已经尝试手动安装 uws 并且 Node 仍然无法解析 uws。
我也遇到了这个问题,不知道怎么解决。
Webpack / 前端人员,如果您只需要在您的客户端应用程序中使用 SocketIO 来连接到某个 WebSocket 服务器,您可以使用这个: https ://github.com/socketio/socket.io-client
解决了我的Module not found: Error: Can't resolve 'uws'
问题!
所以我只是遇到了同样的问题,但原因却截然不同。 目前,当我从 npm 安装最新的 socket.io 服务器包时,将找不到 uws。
发生这种情况是因为 uws 的发布者最近上传了一个空包,删除了所有实际代码 D:
您可以通过安装最后一个未销毁的版本来解决此问题
纱线添加[email protected]
npm install [email protected]
链接到空/不推荐使用的包: https ://www.npmjs.com/package/uws
来自 reddit 的富有洞察力的背景信息: https ://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/
我将在搜索此问题时出现的前几个结果中发布此内容,因为我花了一段时间才弄清楚发生了什么,希望这可以节省一些时间!
对我来说,通过 CLI 或配置--target node
是关键,它解决了我所有的问题。
最有用的评论
所以我只是遇到了同样的问题,但原因却截然不同。 目前,当我从 npm 安装最新的 socket.io 服务器包时,将找不到 uws。
发生这种情况是因为 uws 的发布者最近上传了一个空包,删除了所有实际代码 D:
您可以通过安装最后一个未销毁的版本来解决此问题
纱线添加[email protected]
npm install [email protected]
链接到空/不推荐使用的包: https ://www.npmjs.com/package/uws
来自 reddit 的富有洞察力的背景信息: https ://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/
我将在搜索此问题时出现的前几个结果中发布此内容,因为我花了一段时间才弄清楚发生了什么,希望这可以节省一些时间!