package.json ํ์ผ์ด ์์ง๋ง npm์ ํด๋นํ๋ '์ ํ๋' ํจํค์ง๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค.
ํ์ฌ package.json ํ์ผ์ ์ฃผ๋ก Chosen for ๊ฐ๋ฐ์์ dev ์๊ตฌ ์ฌํญ์ ์ค์นํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
์๋ฒ ์ชฝ์ด ์๋ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฏ๋ก npm์ ๋๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น? (์ด๊ฒ์ ์ค์ ์ง๋ฌธ์ ๋๋ค. ์ ๋ node.js ๊ฐ๋ฐ์๊ฐ ์๋๋ผ PHP ์ฌ๋์ด๋ฏ๋ก npm ๊ท์น์ ๋ชจ๋ฆ ๋๋ค)
์ฃผ๋ ์ด์ ๋ Browserify ๋ฅผ ์ฌ์ฉํ์ฌ JS์์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๋์ฒ์ ์ฝ๊ฐ ๋จ์ด๋จ๋ฆฌ๋ ๋์ var Chosen = require('Chosen');
๋ฅผ ์ํํ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค. ์๋ฒ ์ธก JS๋ ์ด๋ฏธ require
ํ์์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, browserify๋ ์๊ตฌ ์ฌํญ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ(์ข์ ๋ชจ๋ ์ ์ node.js๋ฅผ ์๋ฎฌ๋ ์ดํธํ์ง๋ง ํ๋ก ํธ ์๋์ฉ) ์ด๋ฅผ ํฐ ์ต์ข
build.js๋ก ๋ณํํฉ๋๋ค. ๋ชจ๋ ์ข
์์ฑ ๋ฒ๋ค) ํ์ผ์ index.html์ ์ ๊ณตํฉ๋๋ค.
์ด ๋ฌธ์ ์ ๋ํด +1 โ ๋ด ์ฑ์์ browserify๋ฅผ ์ฌ์ฉํ๊ณ ์ ํํ ๊ฒ์ ์ฌ์ฉํ์ง๋ง ํ์ฌ๋ vendor
๋๋ ํ ๋ฆฌ์ ๋ฃ์ด์ผ ํ๋ฏ๋ก ์ ๋ง ์ง์ฆ๋ฉ๋๋ค.
์ด๊ฒ๋ +1. Browserify๋ฅผ ์ฌ์ฉํ๋ฉด NPM์ ์๋ ๊ฒ์ด ๋งค์ฐ ํฉ๋ฆฌ์ ์ ๋๋ค.
๋์๊ฒ๋ +1 :) ๋ํ browserify ์ฌ์ฉ
+1
+1
+1
+1
์ด ํ๋ฌ๊ทธ์ธ์ด ํ์ํ ๊ฒฝ์ฐ $
๋ฐ jQuery
๋ฅผ ์ ์ญ ๋ฒ์ ๋ฐ ๋์ค์ chosen = require(../path/chosen.min.js)
์์:
var $ = require('jquery');
window.$ = $;
window.jQuery = $;
var chosen = require(./chosen.jquery.min.js)
์ฝ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. $('select').chosen();
์ถ์ฒ: http://www.codefornow.com/2014/06/08/browserify-jquery-and-jquery-plugins/
+1
+1
Browserify ์ง์์ ์ํด +1ํ์ญ์์ค
์ฌ๊ธฐ ์์ ์ ๊ฝค ์ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค.
npm
๊ฒ์์ ์ ๋ ํ์ด ๊ทธ๋ฌํ PR์ ๊ด์ฌ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ํจ๊ป ์ค๋นํ๊ฒ ์ต๋๋ค. ๋น๋๋ ํ์ผ์ Bower์ ์ฌ๋ฆด ์๋ ์๊ณ Chosen์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์๊ฒ ๋ฌธ์ ๊ฐ ์์ด์ผ ํฉ๋๋ค.
@jmeas
๋น๋๋ ํ์ผ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ถ๊ฐ
์ด๊ฒ์ ์ผ์ด๋์ง ์์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ํ๊ณค ํ๊ณ , ๊ทธ๊ฒ์ ํ์๊ฒ ์ ๋ชฝ์ด์์ต๋๋ค. ์ปดํ์ผ๋ JS + CSS๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ถ๊ฐ๋์ง ์์ต๋๋ค. ์ด๋ ์ด์ ํธ๋์ปค์์ ์ฌ๋ฌ ๋ฒ ๋ ผ์๋์์ต๋๋ค.
์ฌ์ ์ปดํ์ผ๋ ๋ฒ์ ์ ๋ฆด๋ฆฌ์ค ํ์ด์ง ๋ฅผ ํตํด ์ ๊ณต๋ฉ๋๋ค. ์ ํํ ํจํค์ง ๊ด๋ฆฌ์๊ฐ ZIP์ ํตํ ํจํค์ง ์ง์ ์ ์ง์ํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ณด๋ ค๋ฉด ๋ฐ์ฐ์ด ์ง์นจ ์ ์ฐธ์กฐํ์ญ์์ค.
์ ํํ ํจํค์ง ๊ด๋ฆฌ์๊ฐ ZIP๋ฅผ ์ง์ํ์ง _ ์๊ฑฐ๋ ํ๋ ๊ฒฝ์ฐ ์ด์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ ค๋ฉด ๋ฌธ์ ๋ฅผ ์ด์ด์ผ ํฉ๋๋ค.
Browserify ์ฌ์ฉ์, ๋ด๊ฐ ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์์์ ์ค๋ช ํ์ง๋ง ๋ค์ ํ ๋ฒ ์์ฝํ๊ฒ ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ 1: Bower ๋ฐ window
README์ ์ง์นจ์ ๋ฐ๋ฅด์ญ์์ค. ๋ถํํ๋ ๋ด๊ฐ ์๋ ํ npm
์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ํ๋ก์ ํธ์ bower
๋ฅผ ์ค์ ํ๊ณ zip์ ์ค์นํ์ญ์์ค. ๋ค์ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ์ฝ๋์ ๋ชจ๋์ ์ถ๊ฐํ์ญ์์ค.
var $ = require('jquery');
// Chosen requires this :(
window.jQuery = $;
require('path/to/bower_components/chosen_v1.3.0/chosen.jquery');
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์๋ํฉ๋๋ค! jQuery๋ ์์๋๋ก ์๊ตฌ์ ์ผ๋ก ์์ ๋๋ฏ๋ก ์ฑ์ ๋ค๋ฅธ ๊ณณ์์ ์ ํํ๋๋ก ์๊ตฌํ ํ์๊ฐ ์์ต๋๋ค.
์ฝ๋์ ๋ค๋ฅธ ๊ณณ์์ ์ด window.jQuery
์ฐธ์กฐํ๊ธฐ ์์ํ์ง ์๋๋ก ๋ธ๋ผ์ฐ์ ์ ์ญ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ๋ฆฐํฐ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์์ ์ฐฝ๋ฌธ์ ๊ด์ฌ์ด ์์ผ์ ๊ฐ์? ๋๋ ๋น์ ์ ๋๋๋ค. ๋ ๋ฒ์งธ ์ต์ ์...
ํด๊ฒฐ ๋ฐฉ๋ฒ 2: ์ง์ ํฌ์ฅ
๋ด ์ฑ์๋ ์ข
์ข
๋ชจ๋ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํจํค์ง๋์ง ์์ ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ vendor
๋๋ ํ ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ ํํ ์ฃผ์์ ์ด UMD ๋ํผ ๋ฅผ ์ถ๊ฐ
์ ๊ทธ๋ฅ browserify-shim์ ์ฌ์ฉํ์ง ์์ต๋๊น?
์ด๊ฒ์ ํ์คํ ์ต์ ์ ๋๋ค. ๋ด ์ฑ์ ํ ์คํธ๋ Node+JSDom์์ ์คํ๋๋ฏ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ shimmํ๊ฑฐ๋ ์จ๋ฆฌ์ด์ฑํ์ง ์๊ณ ์๋ํด์ผ ํฉ๋๋ค.
์ด๋ฒ์ฃผ๋ง๊น์ง npm
์ bower
์ Chosen ๋น๋๊ฐ ์๊ธฐ๋ฅผ ํฌ๋งํฉ๋๋ค. UMD๋ก ๊ฐ์ธ์ ธ ์์ด์ ์ฌ๋๋ค์ ์์ผ๋ก ์ด๋ค ๋ฌธ์ ๊ฐ ์์ด๋ ๊ฑฐ๊ธฐ์์ ์ค์นํ ์ ์์ต๋๋ค. ์๊ธฐ์์ผ์ฃผ์๋ฉด ์ต์ ์ํ๋ก ์ ์งํ๊ฒ ์ต๋๋ค. ๋ฐ๋ผ์ ๊ทํ๊ฐ ๋ฏธ๋์ ๋
์์ด๊ณ ์ ํฌํฌ๊ฐ ์ต์ ๋ฒ์ ์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ด๋ฉด ๋ฆด๋ฆฌ์ค๋ฅผ ์๋ผ๋ผ ์ ์์ต๋๋ค.
:+1: ๊ธฐ๋ณธ bower ๊ตฌ์ฑ ์์์ฉ. scss
ํ์ผ์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค.
npm์ ์ ํ๋ ํจํค์ง๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด +1.
npm์ ์ ํ๋ ํจํค์ง๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด +9001.
Chosen์ ๋ํ ๊ฐ๋ฐ์ด ๋๋ฆฐ ์ง์ ์ ์๋ ๊ฒ ๊ฐ์ผ๋ฉฐ(์ ์ด๋ ํ์ฌ๋ก์๋) ์ ์ง ๊ด๋ฆฌ์๋ Chosen์ด ์๋ํ๋ ํ๊ฒฝ์ ์ ๋ฐ์ดํธํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ผ๋ก ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ prob ๊ฒ์
๋๋ค. ์ด ํ๋ก์ ํธ๋ฅผ ๋ถ๊ธฐํ์ฌ npm ์ง์(์ํ๋ ๊ฒฝ์ฐ UMD ์ง์๋ ์ถ๊ฐ)์ ์ถ๊ฐํ์ญ์์ค. npm/Bower( modern-chosen
์๋)์ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ฒ์ํ ๋ค์ PR์ ์ด์ด ๋ณ๊ฒฝ ์ฌํญ์ ์
์คํธ๋ฆผํ ์ ์์ต๋๋ค.
๊ทธ๋ค์ด ๊ทธ๊ฒ์ ๋ณํฉํ๋ฉด ํ๋ฅญํฉ๋๋ค. ๋น์ ์ ๋น์ ์ ๋ชจ๋์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ๋๋ค์ด ๋์ ํฌํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
(ํน์ ์ธ์ด ์๋ "๋๊ตฌ๋ ์ง"๋ผ๋ ์๋ฏธ๋ก "you"๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค :P )
Bower๊ฐ ์ ํํ ํฌํฌ์ ํจํค์ง ์ ์๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ด๋ ค์์ ๋ฌด์์ ๋๊น? ๊ฒ์ผ๋ฆ์ธ๊ฐ, ๋ฌด๋ฅ์ธ๊ฐ? ์๋ ์ ๋ ธ๋ ์ฌ์ฉ์๋ฅผ ์์ ํ ํธ์คํ ํ๋ ๋์ ์ด๋ ์ ๋ ๋ง์กฑ์ํฌ ์ ์์ต๋๋ค.
Bower๊ฐ ์ ํํ ํฌํฌ์ ํจํค์ง ์ ์๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ด๋ ค์์ ๋ฌด์์ ๋๊น? ๊ฒ์ผ๋ฆ์ธ๊ฐ, ๋ฌด๋ฅ์ธ๊ฐ? ์๋ ์ ๋ ธ๋ ์ฌ์ฉ์๋ฅผ ์์ ํ ํธ์คํ ํ๋ ๋์ ์ด๋ ์ ๋ ๋ง์กฑ์ํฌ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ์ฌ๋ ค ๊น์ ๋๊ธ.. ์คํ ์์ค๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋๊ฐ ์ฌ๊ฐ ์๊ฐ์ ๊ธฐ์ฌํ๊ณ ์์ต๋๋ค. ๊ทธ ์ธ์๋ ๋ชจ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ง ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฝ๋๋ค. ํ์ง๋ง bower-chosen
repo๊ฐ โโ์์ผ๋ฏ๋ก npm ํจํค์ง๊ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ผ๋ฉด ์ ๋ฉ๋๋ค.
@pfiller bower-chosen
์ chosen-packaged
(๋๋ ํน์ ๊ด๋ฆฌ์์ ๊ด๋ จ์ด ์๋ ๋ค๋ฅธ ์ด๋ฆ)๋ก ๋ฐ๊พธ๊ณ bower-chosen
package.json
๋ฅผ ์ ์ฅ์์ ํฌํจํด์ผ ํฉ๋๋ค.
npm ํจํค์ง๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ PR(#2550)์ ์ค์ ํ์ต๋๋ค. ํด๋น PR์ ์ฒจ๋ถ๋ ์์ ํจํค์ง๊ฐ ์ด ํจํค์ง๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ฒํ ํ์ญ์์ค. ๊ฐ์ฌ ํด์!
chosen-js
@koenpunt ๊ฐ์ฌํฉ๋๋ค! ๋ฌธ์ ๋ ํจํค์ง์ ๋น๋๋ ํ์ผ์ด ํฌํจ๋์ด ์์ด ์์ scss๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ด๋ จ: #2347
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ทธ๋ฐ ์ฌ๋ ค ๊น์ ๋๊ธ.. ์คํ ์์ค๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋๊ฐ ์ฌ๊ฐ ์๊ฐ์ ๊ธฐ์ฌํ๊ณ ์์ต๋๋ค. ๊ทธ ์ธ์๋ ๋ชจ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ง ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฝ๋๋ค. ํ์ง๋ง
bower-chosen
repo๊ฐ โโ์์ผ๋ฏ๋ก npm ํจํค์ง๊ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ผ๋ฉด ์ ๋ฉ๋๋ค.@pfiller
bower-chosen
์chosen-packaged
(๋๋ ํน์ ๊ด๋ฆฌ์์ ๊ด๋ จ์ด ์๋ ๋ค๋ฅธ ์ด๋ฆ)๋ก ๋ฐ๊พธ๊ณbower-chosen
package.json
๋ฅผ ์ ์ฅ์์ ํฌํจํด์ผ ํฉ๋๋ค.