μΌλ§ μ μ WebPack λͺ¨λ λ΄μμ socket.io-client
λ₯Ό μ¬μ©νλ €κ³ νλ©΄ μ€λ₯κ° μλ€λ κ²μ κΉ¨λ¬μμ΅λλ€. "dist/debug.js"λ₯Ό μ°Ύμ μ μλ κ²μΌλ‘ λνλ¬μ΅λλ€. λλ μ½κ°μ Unixy μ°κ΅¬λ₯Ό νμ΅λλ€.
[email protected] ~/W/BIRD3 $ grep -r "dist/debug" node_modules/socket.io-client/
node_modules/socket.io-client//node_modules/engine.io-client/node_modules/debug/Makefile:all: dist/debug.js
node_modules/socket.io-client//node_modules/engine.io-client/node_modules/debug/Makefile:dist/debug.js: node_modules browser.js debug.js dist
[email protected] ~/W/BIRD3 $ find node_modules/socket.io-client -name "dist"
[empty]
[email protected] ~/W/BIRD3 $ find node_modules -name "debug.js" | grep dist
κ²°λ‘ : dist
ν΄λλ Browserify νλ‘μΈμ€ μ€μ μ¬μ©λλ κ°μ ν΄λμ¬μΌ ν©λλ€. μ΄μ μ νν μ΄λ»κ² μ κ±°ν©λκΉ? commonJSλ₯Ό μκ³ μλ μμ€ν
μ΄ μ΄λ―Έ μμ§λ§ require("socket.io-client/socket.io")
λ‘ κ°λ κ²μ μ λ§ μ΄λ ΅μ΅λλ€.
λ¬΄κ±°μ΄ μμ μΌλ‘ SIO ν΄λΌμ΄μΈνΈλ₯Ό μΆκ°νλ©΄ ~350KBκ° λ©λλ€... μμ μ¬νμ λ§€μ° νλ₯ν κ²μ λλ€.
λν socket.io-client λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΄λΌμ΄μΈνΈ μΈ‘ μ±μ μΆκ°νμ¬ μλ²μ λ€μ μ°κ²°νλ λ°©λ²μ μ λͺ¨λ₯΄κ² μ΅λλ€.
λ€μκ³Ό κ°μ΄ μꡬνλ €κ³ ν©λλ€.
var io = require("socket.io-client");
var socket = io("http://localhost:3000");
socket.on("data", function(data) {
console.log("data event", data);
});
...κ·Έλ¦¬κ³ μ΄ μ€λ₯κ° λ°μν©λλ€: TypeError: undefined is not an object (evaluating 'global.WebSocket')
for anon function.
λλ μ£Όλ‘ λ°±μλ μ¬λμ΄λ―λ‘ ν΄λΌμ΄μΈνΈ μΈ‘ μλ° μ€ν¬λ¦½νΈλ λ΄ κ°μ μ΄ μλλλ€.
μ
λ°μ΄νΈ: require("socket.io-client/socket.io")
κ° μλν κ² κ°μ§λ§ μμμ μΈκΈν λ΄μ©μ μμνλ κ²½κ³ μ ν¨κ»: This seems to be a pre-built javascript file. Though this is possible, it's not recommended. Try to require the original source to get better results.
@johnelliott : κ·Έλ₯ require("socket.io-client")
νλ©΄ Webpackμ package.json νλͺ©μ ν΅ν΄ μ¬λ°λ₯Έ μμ€λ₯Ό μ°Ύμ΅λλ€. κ²½κ³ λ ν΄λΉ νμΌμ΄ <script>
νκ·Έλ₯Ό ν΅ν΄ λ‘λλλλ‘ ν¨ν€μ§νλμκΈ° λλ¬Έμ λ°μν©λλ€.
μλμ.
κ·Έκ²μ΄ μλνμ§ μλ μ΄μ λ μ€μ²©λ require()μμ μμ ν μ λλ‘ μλνμ§ μλ Bower λͺ¨λμ ν΄κ²°νκΈ° μν΄ νλ¬κ·ΈμΈμ μ¬μ©νκ³ μμκΈ° λλ¬Έμ λλ€. κ·Έλμ μ κ° ν κ²μ κ·Έ μμλ₯Ό λ°κΎΈλ κ²μ΄μμ΅λλ€.
"bower-webpack-plugin" λλ μ΄μ μ μ¬ν νλ¬κ·ΈμΈμ μ¬μ© μ€μ΄λΌλ©΄ λ²λ¦¬μμμ€. μ€μ μ루μ μ λ€μκ³Ό κ°μ΅λλ€.
var bowerProvider = μλ‘μ΄ webpack.ResolverPlugin([
μλ‘μ΄ webpack.ResolverPlugin.DirectoryDescriptionFilePlugin("bower.json", ["λ©μΈ"]),
μλ‘μ΄ webpack.ResolverPlugin.DirectoryDescriptionFilePlugin(".bower.json", ["λ©μΈ"])
], ["μ μ", "λ‘λ"]);
μμ ν μ΄μν΄ λ³΄μ λλ€. λμν©λλ€. νμ§λ§ λͺ λ²μ΄κ³ μ½μ΄λ³΄λ©΄ λͺ¨λμ΄ ν΄κ²°λκ³ νμν λ°©μμ΄ λ³κ²½λλ€λ κ²μ μκ² λ κ²μ λλ€.
κ·Έλλ μλνμ§ μμΌλ©΄ λͺ¨λ λ³μΉμ μ¬μ©ν μ μμ΅λλ€.
ν΄λΌμ΄μΈνΈ λ΄μμ λλ²κ·Έ λΌμ΄λΈλ¬λ¦¬λ λ€μκ³Ό κ°μ΄ λ‘λλ©λλ€.
var λλ²κ·Έ = μꡬ("λλ²κ·Έ")(β¦); // μΈμ©μ μ€λ‘ν©λλ€. μ λ©μΌ ν΄λΌμ΄μΈνΈλ ννΈμμ΅λλ€.
λ°λΌμ webpack.config.jsμ λͺ¨λ λ³μΉμ μΆκ°ν μ μμ΅λλ€.
// ꡬμ±μ resolve μΉμ
μ alias μΉμ
μ μΆκ°ν©λλ€.
module.exports = {
ν΄κ²°νλ€: {
λ³μΉ: {
// μλ λΆνΈμ€νΈλ©κ³Όμ νΈνμ± λ³΄μ₯
"debug$": path.join("node_modules","debug","index.js")
}
}
};
κ·Έλλ μλνμ§ μμΌλ©΄ μλ €μ£Όμμμ€. :)
babel
λ₯Ό μ¬μ©νκ³ μμ΅λκΉ?
λ΄κ° μλμλ€. κ·Έ μ¬μ΄μ SocketClusterλ‘ μ ννμ΅λλ€.
κ·Έλμ κ°μ₯ μ’μ ν΄κ²°μ± μ?
import IO from 'socket.io-client'
webpack
+ babel
μ ν¨κ» μ μλν΄μΌ ν©λλ€.
μ κ° μ¬μ©ν λλ index.js νμΌμ μ§μ λΆλ¬μ¨ κ² κ°μμ. νμ§λ§ κ½€ μ€λμ μ... κ·Έλμ νμ ν μ μμ΅λλ€.
μ΄κ²μ΄ λ«ν μ μλ€κ³ μκ°νμμμ€.
μ΄ μ€λ₯κ° κ³μ λ°μν©λλ€. μμ§ λ«νμλ μ λ κ² κ°μ΅λλ€.
npmμμ socket.io-clientλ₯Ό μ κ±°νκ³ bowerλ₯Ό ν΅ν΄ μ€μΉνμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
λλμ΄ κ°μ λ¬Έμ κ° μμ΅λλ€. μ λ λ°μ°μ²λ₯Ό μ¬μ©νμ§ μμ΅λλ€. λ€λ₯Έ λ°©λ²μ΄ μμ΅λκΉ?
μΉν© ꡬμ±μμ λ³μΉμ μ¬μ©ν μ μμ΅λλ€.
λλ SIO κ°λ°μκ° λ λμ μ루μ
μ μ°Ύμ΅λλ€.
λ‘ μ
λ°μ΄νΈν λ λμΌν λ¬Έμ κ° λ°μνμ΅λλ€.
npm 3.3.9
webpack 1.12.13
socket.io-client 1.4.5
μ΄κ²μ μΆκ°νμ¬ ν΄κ²°
resolve: {
alias: {
'socket.io-client': path.join( nodeRoot, 'socket.io-client', 'socket.io.js' )
}
},
module: {
noParse: [ /socket.io-client/ ]
}
λꡬλ μ§ λ λμ μ루μ μ΄ μμ΅λκΉ?
@faller λ
Έλ 루νΈμ 무μμ λ£μ΅λκΉ? κ³΅μ© λλ ν 리μ μλ κ²κ³Ό κ°κ±°λ HTML νμΌμμ κ°μ Έμ¨ κ²μ
λκΉ?
λμ μ§λ¬Έμ΄λΌλ©΄ λ΄ λμ, μ μ μ΄κ²μ μ¬μ©ν μ μ΄ μμ΅λλ€.
@kennetpostigo var nodeRoot = path.join( __dirname, 'node_modules' ),
μ€λ₯κ° λ§μ΄ λ°μνμ§λ§ require('socket.io/lib/socket.js')
λ₯Ό μ¬μ©νμ¬ ν΄κ²°νμ§λ§ μ΄μ μλ‘μ΄ μ€λ₯κ° λ°μν©λλ€.
νΈμΆ μ½λ
var socket = require('socket.io/lib/socket.js')('http://appdev:3000');
λλ κ°μ μ€λ₯κ° λ°μνμ΅λλ€. λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ κΉ¨λ¬μ μ μμλ κ² κ°μμ.
Webpackμ require.resolveκ° μλ _only_ νμλ₯Ό ν΄κ²°ν©λλ€. λ€μκ³Ό κ°μ΄ _lib/index.js_ νμΌμμ μ¬μ©λκΈ° λλ¬Έμ λ¬Έμ κ° μ΄κ²μ΄λΌκ³ μκ°ν©λλ€.
var clientSource = read(require.resolve('socket.io-client/socket.io.js'), 'utf-8');
μ΄κ²μ webpackμ λ¬Έμ μ
λλ€. κ·Έ μ§μλ¬Έκ³Ό ν¨κ» μλνμ§ μμμΌ νκΈ° λλ¬Έμ μ¬κΈ° μμ λ³Ό μ μλ λ°©λ²μ΄ μμ΅λλ€.
μ΄κ²μ μ΄ν΄νκ³ λλ©΄ μμμ μΈκΈν μ½λ μ€μ΄ /socket.io.js
λ₯Ό μ 곡νλ μμ²μ μ²λ¦¬νλ ν¨μμλ§ μ μ©νλ€λ κ²μ μμμ΅λλ€.
μ΄ κΈ°λ₯μ λ΄ μμ© νλ‘κ·Έλ¨μμ μμ ν μΈλͺ¨κ° μμκΈ° λλ¬Έμ(μ λ require('modulename')
λ§ μ¬μ©ν©λλ€. μμ μ€κ³Ό _lib/index.js_ νμΌμ μ 체 serve
ν¨μμ μ£Όμμ λ¬μμ΅λλ€. μ΄μ λ€μκ³Ό κ°μ΄ μλν©λλ€. 맀λ ₯.
μ΄κ²μ λ²κ·Έλ‘ κ°μ£Όν΄μΌ νλμ§ μ¬λΆλ λͺ¨λ₯΄κ² μ§λ§ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μκ³ μ΄λ»κ² μμ ν΄μΌ νλμ§ μ΄ν΄νλ λ° μκ°μ΄ μ’ κ±Έλ Έμ΅λλ€.
μ¬λ¬ socket.io μΉν© λΉλ λ¬Έμ λ λ°μν©λλ€.
ERROR in ./~/socket.io/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' /Users/mkozachek/development/webserver_development/node_modules/socket.io-client/socket.io.js in /Users/mkozachek/development/webserver_development/node_modules/socket.io/lib
@ ./~/socket.io/lib/index.js 9:13-40
ERROR in ./~/socket.io/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' /Users/mkozachek/development/webserver_development/node_modules/socket.io-client/socket.io.js/package in /Users/mkozachek/development/webserver_development/node_modules/socket.io/lib
@ ./~/socket.io/lib/index.js 10:20-55
ERROR in ./~/socket.io/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' /Users/mkozachek/development/webserver_development/node_modules/socket.io-client/socket.io.js/dist/socket.io.min.js in /Users/mkozachek/development/webserver_development/node_modules/socket.io/lib
@ ./~/socket.io/lib/index.js 101:24-81
λ€μμ ν¬ν¨νλλ‘ μΉν© ꡬμ±μ μμ νμ΅λλ€.
resolve: {
alias: {
'socket.io-client': path.join( __dirname, 'node_modules', 'socket.io-client', 'socket.io.js' )
}
},
, ν΄λΌμ΄μΈνΈμ noparse λ° λμ: 'λ
Έλ'.
μ¬κΈ°μ λͺ κ°μ§ λ€λ₯Έ λ¬Έμ κ° μλ κ² κ°μ΅λλ€. μ¬κΈ° μμ ν΄λΌμ΄μΈνΈμ μλ²λ₯Ό λͺ¨λ λ¬Άμ μ μμλ κ² κ°μ΅λλ€. λꡬλ μ§ κ·Έ μλ₯Ό νμΈν μ μμ΅λκΉ?
Webpack 2.2 λ° socket.io-client 1.7.2μμ μ΄ μ€λ₯κ° λ°μνμ΅λλ€. μ¬κΈ°μ λμ΄λ κ±°μ λͺ¨λ κ²μ μλνμ§λ§ μ무 κ²λ μλνμ§ μμμ΅λλ€. κ²°κ΅ λλ λλ²κ·Έ λͺ¨λμ node_modules, npm i debug -S
μ μ€μΉνκ³ 'debug'λ₯Ό λ΄ webpack κ΅¬μ± externals: ['debug'],
μ μΈλΆλ‘ λμ΄νμ¬ μ€λ₯λ₯Ό μ€μ§νμ΅λλ€.
μλ νμΈμ, socket.io-clientμμλ 맀λ ₯μ²λΌ μλνμ§λ§ μλ²μμλ μλνμ§ μκΈ° λλ¬Έμ μ΄ λ¬Έμ λ₯Ό λ€μ μ΄κ³ μΆμ΅λλ€!
λ°λΌμ socket.ioλ₯Ό Webpackκ³Ό ν¨κ» μ¬μ©νμ¬ NodeJS μλ²λ₯Ό λ²λ€λ‘ λ¬Άμ μ μμ΅λλ€! λλ μλνμ§ μλ λͺ κ°μ§ λΌμ΄λΈλ¬λ¦¬μ ν¨κ» μΉν©μ "μΈλΆ"μ socket.ioλ₯Ό λ£μ΄μΌ ν©λλ€(μΉν© μ체 ν¬ν¨)
Webpack λ° Yargsμμ λ€μ κ΄λ ¨ λ¬Έμ λ₯Ό μ°Έμ‘°νμμμ€.
https://github.com/webpack/webpack/issues/1434
https://github.com/yargs/yargs/issues/312
@rgranger λ€μμ μλ²μ webpack
λ° socket.io
λ₯Ό μ¬μ©νλ λ°©λ²μ λν μμ
λλ€.
ν¨ν€μ§.json
{
"name": "whatever",
"version": "1.0.0",
"description": "",
"main": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "John Doe",
"license": "ISC",
"dependencies": {
"brfs": "^1.4.3",
"bufferutil": "^3.0.0",
"socket.io": "^1.7.3",
"transform-loader": "^0.2.4",
"utf-8-validate": "^3.0.1"
},
"devDependencies": {
"json-loader": "^0.5.4",
"null-loader": "^0.1.1",
"webpack": "^2.4.1"
}
}
μΉν©.config.js
const path = require("path");
module.exports = {
entry: './server.js',
target: 'node',
output: {
path: __dirname,
filename: 'bundle.server.js'
},
module: {
loaders: [
{
test: /(\.md|\.map)$/,
loader: 'null-loader'
},
{
test: /\.json$/,
loader: 'json-loader'
},
{
test: /\.js$/,
exclude: '/node_modules/',
loader: "transform-loader?brfs"
}
]
}
};
μλ².js
const server = require('http').createServer();
const io = require('socket.io')(server, {
// serveClient: false // do not serve the client file, in that case the brfs loader is not needed
});
const port = process.env.PORT || 3000;
io.on('connect', onConnect);
server.listen(port, () => console.log('server listening on port ' + port));
function onConnect(socket){
console.log('connect ' + socket.id);
socket.on('disconnect', () => console.log('disconnect ' + socket.id));
}
μλ²μ© μν Webpack λΉλ: https://github.com/socketio/socket.io/tree/master/examples/webpack-build-server
@Arbaoui-Mehdiμκ² κ°μ¬λ립λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ μ΄μ λ ν΄λΌμ΄μΈνΈ socket.js μλΉμ€λ₯Ό λΉνμ±ννλ κ²μ λλ€.
@freemh λΉμ μ λ΄ μλͺ μ ꡬν©λλ€ ν
Webpack v3λ₯Ό μ¬μ©ν λ λ°©κΈ
npm install --save-dev uglifyjs-webpack-plugin@1
κ·Έλ° λ€μ $ webpack.optimize.UglifyJsPlugin({...})
UglifyJsPlugin(...)
λ₯Ό μ¬μ©νμμμ€.
μ΅μ
μ΄ λ³κ²½λλ€λ μ μ μ μνμμμ€. κ°μ²΄ λ΄λΆμ uglifyOptionsλ₯Ό μΆκ°ν΄μΌ ν©λλ€.
μ°Έμ‘°: https://github.com/webpack-contrib/uglifyjs-webpack-plugin
κ°μ₯ μ μ©ν λκΈ
webpack
+babel
μ ν¨κ» μ μλν΄μΌ ν©λλ€.