Socket.io: WebPack용으둜 λΉŒλ“œν•  λ•Œ 였λ₯˜ λ°œμƒ

에 λ§Œλ“  2015λ…„ 05μ›” 02일  Β·  27μ½”λ©˜νŠΈ  Β·  좜처: socketio/socket.io

μ–Όλ§ˆ 전에 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κ°€ λ©λ‹ˆλ‹€... μˆ˜μ • 사항은 맀우 ν›Œλ₯­ν•  κ²ƒμž…λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

import IO from 'socket.io-client'

webpack + babel 와 ν•¨κ»˜ 잘 μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λ“  27 λŒ“κΈ€

λ˜ν•œ 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') λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν–ˆμ§€λ§Œ 이제 μƒˆλ‘œμš΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

untitled

호좜 μ½”λ“œ
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

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰