gpt4 book ai didi

node.js - 使用 webpack 转译 Node 服务器和 socket.io

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:50 24 4
gpt4 key购买 nike

我尝试为使用 socket.io 的 Node 服务器使用 webpack。

我有一个简单的服务器:

var server = require('http').createServer();
var io = require('socket.io').listen(server);

io.on('connection', function(client) {
console.log('new client');

client.on('hello', function(data) {
console.log('msg: ', data);
});

client.on('disconnect', function(){
console.log('client disconnect');
});
});

server.listen(3000);

还有我的 webpack.config.js

var config = {
target: "node",
entry: {
server: ["server.js"]
},
module: {
loaders: [
{
test: /\.(txt|json|osgjs|osgt|bin)$/,
loader: "file?name=[path][name].[ext]"
}
],
noParse: ["ws"]
}
externals: ["ws"],
output: {
path: __dirname,
filename: "[name].js"
}
}

module.exports = config;

当我“编译”时我没有错误,只是一个警告:

> NODE_ENV=development BUILD_TARGET=server webpack --display-error-details

Hash: a692e23215bcd6caa05a
Version: webpack 1.13.2
Time: 672ms
Asset Size Chunks Chunk Names
_/node_modules/mime-db/db.json 145 kB [emitted]
_/node_modules/socket.io-client/package.json 4.29 kB [emitted]
server.js 572 kB 0 [emitted] server
[0] multi server 28 bytes {0} [built]
[1] ./server.js 346 bytes {0} [built]
+ 88 hidden modules

WARNING in ../~/engine.io/lib/server.js
Critical dependencies:
74:43-65 the request of a dependency is an expression
@ ../~/engine.io/lib/server.js 74:43-65

当我尝试启动我的服务器时:

fs.js:977
return binding.fstat(fd);
^

Error: EBADF: bad file descriptor, fstat
at Error (native)
at Object.fs.fstatSync (fs.js:977:18)
at tryStatSync (fs.js:462:13)
at fs.readFileSync (fs.js:510:12)
at Object.<anonymous> (/Users/alexis/Documents/server.js:109:21)
at __webpack_require__ (/Users/alexis/Documents/server.js:21:30)
at Object.<anonymous> (/Users/alexis/Documents/server.js:56:34)
at __webpack_require__ (/Users/alexis/Documents/server.js:21:30)
at Object.<anonymous> (/Users/alexis/Documents/server.js:48:19)
at __webpack_require__ (/Users/alexis/Documents/server.js:21:30)

我用:

  • Node :6.7.0
  • 网络包:1.13.2
  • socket.io: 1.5.1

最佳答案

警告来自动态要求,例如:

const test = require('scripts/' + scriptName)

忽略它通常是安全的。 Webpack 尝试使用上下文模块来处理动态需求,它基本上是所有可能匹配动态需求的模块的表示。你可以在这里读更多关于它的内容: https://webpack.github.io/docs/context.html

关于这个错误,如果你不需要将 socket.io 打包到你的输出包中,你可以将它添加到 webpack 的外部配置中,webpack 会忽略它,但是你需要有一个 node_modules 文件夹解决方案中的 socket.io。

所以你的配置将是:

var config = {
target: "node",
entry: {
server: ["server.js"]
},
module: {
loaders: [
{
test: /\.(txt|json|osgjs|osgt|bin)$/,
loader: "file?name=[path][name].[ext]"
}
],
noParse: ["ws"]
}
externals: ["ws", "socket.io"],
output: {
path: __dirname,
filename: "[name].js"
}
}

module.exports = config;

实际上最好不要在后端应用程序的 bundle 中包含 node_modules 依赖项,并且有一个 webpack 插件专门用于此目的: https://www.npmjs.com/package/webpack-node-externals

如果您想改用插件,您的配置将是(在安装 webpack-node-externals 之后):

var nodeExternals = require('webpack-node-externals')

var config = {
target: "node",
entry: {
server: ["server.js"]
},
module: {
loaders: [
{
test: /\.(txt|json|osgjs|osgt|bin)$/,
loader: "file?name=[path][name].[ext]"
}
],
noParse: ["ws"]
}
externals: [nodeExternals()],
output: {
path: __dirname,
filename: "[name].js"
}
}

module.exports = config;

关于node.js - 使用 webpack 转译 Node 服务器和 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40343782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com