Cit*_*des 5 node.js socket.io webpack
我尝试将webpack用于使用socket.io的节点服务器。
我有一个简单的服务器:
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);
Run Code Online (Sandbox Code Playgroud)
还有我的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;
Run Code Online (Sandbox Code Playgroud)
当我“编译”我没有错误,只是一个警告:
> 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
Run Code Online (Sandbox Code Playgroud)
当我尝试启动服务器时:
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)
Run Code Online (Sandbox Code Playgroud)
我用 :
警告来自动态需求,例如:
const test = require('scripts/' + scriptName)
Run Code Online (Sandbox Code Playgroud)
通常可以忽略它。Webpack尝试使用上下文模块来处理动态需求,该上下文模块基本上是与动态需求匹配的所有可能模块的表示。您可以在此处了解更多信息:https : //webpack.github.io/docs/context.html
关于错误,如果您不需要将socket.io捆绑在输出包中,则可以将其添加到webpack的外部配置中,而webpack只会忽略它,但是您需要使用socket.io创建一个node_modules文件夹在您的解决方案中。
因此,您的配置将是:
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;
Run Code Online (Sandbox Code Playgroud)
实际上,最好不要在软件包中为后端应用程序包含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;
Run Code Online (Sandbox Code Playgroud)