๋ฉ์ ์ ๋ดR(์นด์นด์คํก+RhinoJS) ํ๊ฒฝ์ ๋ถ์กฑํ ์ ์ ๋ณด์ํ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ ์ฉํ ๋ชจ๋๋ค์ ์ค์นํ ์ ์๋๋ก ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
ํ์ ํจํค์ง๋ ์๋์ ๊ฐ๋ค.
๋ฉ์ ์ ๋ด ๊ธฐ๋ณธ ํด๋/global_modules์ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ koine ํด๋๋ฅผ ๊ทธ๋๋ก ์ง์ด๋ฃ๊ณ , ๋ด์ ์ ์ญ์์ ์๋์ ์ฝ๋๋ฅผ ์คํํ๋ค.
// ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
const LIBRARY_PATH = '/storage/emulated/0/koine'
require(LIBRARY_PATH)(
this, // [object global] - ์ ์ญ ๊ฐ์ฒด
LIBRARY_PATH // koine ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์นํ ๊ฒฝ๋ก
// ๊ฒฝ๋ก ๊ธฐ๋ณธ๊ฐ = ๋ฉ์ ์ ๋ดR์ global_modules/koine
)
// ๊ฐ ๋ชจ๋ ๋ณ ์ด๊ธฐ ์ค์
// ์ด๊ธฐ ์ค์ ์ด ํ์ํ ๋ชจ๋์ ์์ฑ์ผ๋ก ํธ์ถ ์ null์ด ๋ฐํ๋จ
kpack.init(
"packageName.moduleName",
"base", // ํด๋น ํจํค์ง์ ๋ชจ๋ ํ์ ๋ชจ๋ ์ ์ฉ
"extension.Array.range"
)
klib.packageName.moduleName // ์ง์ ํธ์ถ ๊ฐ๋ฅ
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจํค์ง, ๋๋ ๋ชจ๋์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
// ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
koine //๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ package // ํจํค์ง๋ช
โ config.json // ํจํค์ง ์ ๋ณด/์ค์ ํ์ผ
โ module // ๋ชจ๋๋ช
โ config.json // ๋ชจ๋ ์ ๋ณด/์ค์ ํ์ผ
โ index.js // ๋ชจ๋
โ init.js // ์ด๊ธฐ ์ค์ ํจ์
โ package
...
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ ํ์ ํด๋ ์ค config.json ํ์ผ์ด ์กด์ฌํ๋ฉฐ, type:"koinelib/package" ์ผ ๊ฒฝ์ฐ ํจํค์ง๋ก ํ์ ํฉ๋๋ค.
ํด๋น ๊ฐ์ฒด์๋ ํจํค์ง์ ์ ๋ณด์ ๊ธฐ๋ณธ ์ค์ ์ ๊ธฐ์ ํ ์ ์์ต๋๋ค.
{
"type": "koinelib/package", // ํด๋น ์์ฑ์ด ์์ด์ผ ํจํค์ง๋ก ํ๋จ
}
ํจํค์ง์ ์ํ ํด๋ ์ค ์๋ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ฉด ์๋์ผ๋ก ๋ชจ๋๋ก ํ์ ๋ฉ๋๋ค.
ํจํค์ง์ ๋ง์ฐฌ๊ฐ์ง๋ก config.json์ ์์์ ์๋์ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
{
"type": "koinelib/module", // ๋ชจ๋ ํ์ ์กฐ๊ฑด
}
(*version 0.4 ์ถ๊ฐ)index.js ํ์ผ์ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ ์ฝ๋์ ๋์ผํ๋, ์๋์ฒ๋ผ 'ํจ์๋ฅผ ๋ฐํํ๋ ํจ์' ๋ฅผ ๋ฐํํด์ผํฉ๋๋ค.
module.exports = function(pack){
...
return func // ํจ์
}
์ด๋ export๋๋ ํจ์๊ฐ ์๋์ผ๋ก ๋ชจ๋์ ๋ถ๋ชจ ํจํค์งpack ๋ฅผ ์ธ์๋ก ๋ฐ์ ์คํ๋์ด ๋ฐํํ๋ ํจ์ func๊ฐ ๋ฐ๋ก ๋ชจ๋์ด ์ ๊ณตํ๋ ํด๋์ค/๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ klib๊ณผ ๊ฐ์ด ์์ฑ์ผ๋ก ํ์ ๋ชจ๋/ํจํค์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค.
pack.$parent๋ก ์์ ํจํค์ง์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
module.exports = function(pack){
pack.$parent["ํ์ฌ ํจํค์ง๋ช
"] === pack // true
return func
}
*์ฃผ์: ๋ชจ๋ ์์ ์ ์ฐธ์กฐํ๋ฉด ์ฌ๊ท ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์กฐ๊ธ ๊ท์ฐฎ์ง๋ง ๋ชจ๋ ๊ฐ ์ํต์ ์ํํ ํ๊ณ ๋ชจ๋ ์ค์ฝํ๋ฅผ ํด๋ก์ ๋ฅผ ํตํด ํ์คํ ๋ถ๋ฆฌํ๋๋ก ํ๊ธฐ ์ํจ์ด๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.
๋จ, ์ด๋ค ๋ชจ๋์ ์ฌ์ฉ ์ ์ด๊ธฐ ์ค์ initialization์ ์๊ตฌํ๋ ๊ฒฝ์ฐ๋ ์์ ์ ์์ต๋๋ค. config.json์ requireInit ์์ฑ์ ๋ช ์ํจ์ผ๋ก์จ ์ด ์ฌ๋ถ๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
// config.json
{
"type": "koinelib/module",
"requireInit": true
}
requireInit ์์ฑ์ด true๋ผ๋ฉด ๋ชจ๋์ด init(koine.init)๋์ง ์์ผ๋ฉด ํด๋น ๋ชจ๋์ ์ฌ์ฉ(ํธ์ถ)ํ ์ ์์ต๋๋ค.
init.js ๋ index.js๋ก ๋ฐํ๋๋ ๋ชจ๋๊ณผ ์ ์ญ(global) ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ ์คํ๋ฉ๋๋ค.
// File: .../module/init.js
module.exports = function(module, _global){
_global.moduleTest = module
}
config.json์ requireInit์ ๋ช ์ํ์ง ์์์ง๋ง init.js๊ฐ ๊ฐ์ง๋ ๊ฒฝ์ฐ์๋ ์์์ ์ผ๋ก true๊ฐ ๋ฉ๋๋ค.
๋ํ, init.js๊ฐ ์กด์ฌํ๋๋ผ๋ requireInit๊ฐ false๋ผ๋ฉด init ์์ด๋ ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํจํค์ง ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๊ฑฐ๋, ๊ธฐ๋ฐ์ด ๋๋ ๋ชจ๋๋ค์ด ์์ ์ ์์ต๋๋ค. ๋ด์ฅ๋์ด ์์ ์ฑ์ ์ํด ๋จ์ ๋ฌธ์ ์ง์ํ๋ assert, ํด๋์ค(์์ฑ์) ๊ฐ ์์์ ๋๋ inherits์ฒ๋ผ์.
์ด์ฒ๋ผ base ํจํค์ง์ ๋ด์ฅ๋ ๋ชจ๋๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ ์ ์ต์ด์ ์๋์ผ๋ก init๋๋ ์ ์ ์ํด์ฃผ์ธ์!