Pixi.js: ์›นํŒฉ๊ณผ์˜ ํ˜ธํ™˜์„ฑ

์— ๋งŒ๋“  2015๋…„ 05์›” 28์ผ  ยท  16์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pixijs/pixi.js

var PIXI = require('pixi.js');

์ฒซ ๋ฒˆ์งธ ์‹œ๋„๋กœ ์ธํ•ด ์›นํŒฉ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ERROR in ./~/pixi.js/src/filters/ascii/AsciiFilter.js
Module not found: Error: Cannot resolve module 'fs' in /Users/michaeldelaney/Workspace/web_dev/gulp-starter/node_modules/pixi.js/src/filters/ascii
 @ ./~/pixi.js/src/filters/ascii/AsciiFilter.js 3:9-22

ERROR in ./~/pixi.js/src/filters/blur/BlurXFilter.js
Module not found: Error: Cannot resolve module 'fs' in /Users/michaeldelaney/Workspace/web_dev/gulp-starter/node_modules/pixi.js/src/filters/blur
 @ ./~/pixi.js/src/filters/blur/BlurXFilter.js 3:9-22

ERROR in ./~/pixi.js/src/filters/blur/BlurYFilter.js
Module not found: Error: Cannot resolve module 'fs' in /Users/michaeldelaney/Workspace/web_dev/gulp-starter/node_modules/pixi.js/src/filters/blur
 @ ./~/pixi.js/src/filters/blur/BlurYFilter.js 3:9-22

etc...

๊ทธ๋ž˜์„œ ๋‚˜๋Š” webpack์˜ ์„ค์ •์—์„œ node: { fs: "empty" } ๋ฅผ ์„ค์ •ํ–ˆ๊ณ  ์œ„์˜ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ์ด ์˜ค๋ฅ˜ :

ERROR in ./~/pixi.js/package.json
Module parse failed: /Users/michaeldelaney/Workspace/web_dev/gulp-starter/node_modules/pixi.js/package.json Line 2: Unexpected token :
You may need an appropriate loader to handle this file type.
| {
|   "name": "pixi.js",
|   "version": "3.0.6",
|   "description": "Pixi.js is a fast lightweight 2D library that works across all devices.",
 @ ./~/pixi.js/src/core/const.js 14:13-42

๊ทธ๋ž˜์„œ webpack์˜ ์„ค์ •์— json-loader ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

module: {
  loaders: [{
    test: /\.json$/,
    loader: 'json-loader'
  }]
}

์„ฑ๊ณต. ๊ทธ๋ž˜๋„ ์ด๊ฒƒ์ด ์ƒ์ž์—์„œ ์ž‘๋™ํ•œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿค” Question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Webpack์—๋Š” ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š๊ณ  "์‚ฌ์ „ ํฌ์žฅ ๋œ"๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์˜ˆ : pixi.js)๋ฅผ๋กœ๋“œ ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด webpack ๊ตฌ์„ฑ์—์„œ ๋ชจ๋“ˆ ์„น์…˜์— noParse๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

module: { noParse: [ /.*(pixi\.js).*/ ], }

์ด ์Šค ๋‹ˆํŽซ์€ ๋‚ด๋ถ€ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  16 ๋Œ“๊ธ€

browserify brfs ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

https://github.com/GoodBoyDigital/pixi.js/blob/master/package.json#L57 -L61

์–ด๋–ป๊ฒŒ ๊ทธ ์›นํŒฉ์„ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. browserify ๋ณ€ํ™˜์„ ์‹คํ–‰ํ•˜๋Š” ์›นํŒฉ์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@drkibitz @englercj ํžŒํŠธ๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. transform-loader + json-loader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Pixi + Webpack์„ ์‹œ์ž‘ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@fusepilot ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ์‚ฌ์šฉ์ค‘์ธ webpack ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Babel์„ ์‚ฌ์šฉํ•  ๋•Œ @mking ๊ตฌ์„ฑ์ด ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. brfs๋ฅผ postLoaders๋กœ ์˜ฎ๊ฒจ์•ผํ–ˆ์ง€๋งŒ ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : https://gist.github.com/oal/898df82fa64e54dd16d0

์ด๊ฒƒ์ด ๋Œ€๋‹ต ํ•œ ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋‹ซํž™๋‹ˆ๋‹ค.

pixi.js/src/core/const.js ../../package.json ๋ฅผ ์š”๊ตฌํ•˜๊ณ  Cannot find module "../../package.json" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. @oal์— ์˜ํ•ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์œผ๋กœ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•ซ ๋ชจ๋“ˆ ์žฌ๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” import PIXI from 'pixi.js/bin/pixi.js' ์™€ ๊ฐ™์€ pixi.js์˜ ๋นŒ๋“œ ๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ํ•ซ ๋ฆฌ๋กœ๋“œ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

[HMR] ./~/pixi.js/bin/pixi.js Critical dependencies: 34:477-484 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. @ ./~/pixi.js/bin/pixi.js 34:477-484

.json์„ ์ง€์›ํ•˜๋ ค๋ฉด ์›น ํŒฉ์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Node / browserify๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

@englercj json-loader ๊ตฌ์„ฑ์‹œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” webpack์˜ ์ „๋ฌธ๊ฐ€๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฒˆ๋“ค์ด ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— webpack-hot-middleware๋กœ ์ธํ•œ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋Š” dev ๋ชจ๋“œ์—์„œ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํ , ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ ๋ฏธ์•ˆ ๋‚˜๋„ ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค : /

Webpack์—๋Š” ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š๊ณ  "์‚ฌ์ „ ํฌ์žฅ ๋œ"๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์˜ˆ : pixi.js)๋ฅผ๋กœ๋“œ ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด webpack ๊ตฌ์„ฑ์—์„œ ๋ชจ๋“ˆ ์„น์…˜์— noParse๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

module: { noParse: [ /.*(pixi\.js).*/ ], }

์ด ์Šค ๋‹ˆํŽซ์€ ๋‚ด๋ถ€ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ฐพ์€ PIXI๋กœ ์›นํŒฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ์ง์ ‘์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

https://gist.github.com/mjackson/ecd3914ebee934f4daf4

์ด ์š”์ง€๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ webpack + pixi.js ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

https://gist.github.com/mjackson/ecd3914ebee934f4daf4

(์ข‹์€ ์˜๊ฒฌ๊ณผ ํ•จ๊ป˜)

์œ„์— ๋งํฌ ๋œ ์š”์ ์€ pixijs / pixi์™€ ๊ด€๋ จ๋œ ๋ฒ„๊ทธ๋กœ ๊ณ ํ†ต๋ฐ›์Šต๋‹ˆ๋‹ค. js @ 5a53e38 -pixi์˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ __VERSION__ ๋กœ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.

webpack.config.js ์—๋Š” ๋‹ค์Œ ๋กœ๋”๊ฐ€ ํฌํ•จ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

{
  include: path.resolve(__dirname, 'node_modules/pixi.js'),
  loader: 'transform/cacheable?browserify-versionify'
}

์š”์  ๋Œ“๊ธ€์€ ๋ถ„๋ช…ํžˆ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— @mjackson์ด ์—ฌ๊ธฐ์— ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ž

์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋‹ค์Œ์€ Webpack / Typescript ๋ฐ PixiJS์— ๋Œ€ํ•œ ์ž‘์—… ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. :-). https://gist.github.com/Nek-/b9775f7a88eb896db8afc37a89db3771

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰