ç§ã¯ãããreact-nativeã¢ããªã§äœ¿çšããããšããŠããŸãããã³ã³ããŒãã³ãã¯ããã©ã«ãã§ãã©ãŠã¶ãŒããŒã¹ã®ç»åã¯ã©ã¹ã䜿çšããŠããããã§ãã«èšèŒãããŠããããã«ããŒãç»åã¯ã©ã¹ã䜿çšããæ¹æ³ãããããŸããã READMEã
ç§ã¯æã£ãŠãã
var Vibrant = require('node-vibrant');
const {
Image,
} = Vibrant;
ãããŠãç§ãç»åãªãã·ã§ã³ãèšå®ããããšãããš
var v = new Vibrant(uri, {Image: Image.Node});
Cannot read property 'Node' of undefined
ãåãåããŸã
Image.Nodeãæ£ããã€ã³ããŒãããŠããªããšæããŸããããã®æ¹æ³ãããããŸããã
ããŒãã ç§ã¯ããŒãã¢ãžã¥ãŒã«ãreact-nativeã§åäœããããšãæåŸ
ããããšã«ã€ããŠçŽ æŽã ãšæããŸãã ãã®ç¹å®ã®åé¡ãåå¿ãããã€ãã£ãããã±ãŒãžã£åªçã®ã§çããããšãç§ãèŠã€ããbrowser
ãã£ãŒã«ãpackage.json
ãã©ãŠã¶ã®ããŒãžã§ã³ã¯ã代ããã«ããŒãã®ããŒãžã§ã³ã§ããŒããããããã«ã node-vibrant/lib/index
èŠæ±ããããšã§ãããåé¿ã§ããŸããã次ã®ãšã©ãŒã¯Requiring unknown module 'fs'
@chetstone rn-nodeifyãè©ŠããŸãããïŒ ã³ã¢ããŒãã¢ãžã¥ãŒã«ã¯ãå®éã«ã¯ããŒãïŒV8ïŒã§ã¯ãªããJSCã§å®è¡ããããããRNã¢ããªã§ã¯ããã©ã«ãã§æ©èœããŸããã é²åŒŸã§ã¯ãããŸããããç§ã®çµéšã§ã¯ããªãããŸãæ©èœããŸãã
ããã¯èšã£ãŠããç§ã¯ããŒã掻æ°ã«åé¡ãæ±ããŠããŸãã ããªãããããè©ŠããŠãããªããã©ãã«è¡ãã®ãèŠãããšãã§ããŸããïŒ fs
ã«åé¡ã¯ãããŸããããpngjsãŸãã¯stream-toã¢ãžã¥ãŒã«ã§ã®stream
rn-nodeifyããã¯ã¯è¿œå ãããŠããªããšæããŸãã
ç·šéïŒããã¯ãpngjsã«é¢é£ããŠããå Žåã«é¢é£ããå¯èœæ§ããããŸãïŒ https ïŒ
ïŒåèã®ããã«ïŒ
ââ⬠[email protected]
â ââ⬠[email protected]
â â âââ [email protected]
â â âââ [email protected]
â â âââ [email protected]
â â âââ [email protected]
â â âââ [email protected]
â â âââ [email protected]
â â ââ⬠[email protected]
â â â âââ [email protected]
â â â âââ [email protected]
â â â âââ [email protected]
â â â ââ⬠[email protected]
â â â â âââ [email protected]
â â â â ââ⬠[email protected]
â â â â âââ [email protected]
â â â ââ⬠[email protected]
â â â â âââ [email protected]
â â â â ââ⬠[email protected]
â â â â â âââ [email protected]
â â â â â âââ [email protected]
â â â â âââ [email protected]
â â â âââ [email protected]
â â âââ [email protected]
â â âââ [email protected]
â â âââ [email protected]
â â ââ⬠[email protected]
â â â âââ [email protected]
â â âââ [email protected]
â â ââ⬠[email protected]
â â âââ [email protected]
â âââ [email protected]
â ââ⬠[email protected]
â âââ [email protected]
â âââ [email protected]
ããŒãã 以åã®PLïŒ21ã¯ãReactNativeã§åäœãããšãã«ããŒãã掻æ°ã«æºã¡ãŠããããšã瀺ããŠããããã§ãã
ç§ã¯ãŸã ReactNativeãè©ŠããŠããŸããããã ãããšã³ããªã¹ã¯ãªãããšããŠlib/index.js
ãããŒãããå Žåãããã©ã«ãã®ã€ã¡ãŒãžå®è£
ã¯nodejsã®ãã®ã§ããå¿
èŠããããŸãã ïŒhttps://github.com/akfish/node-vibrant/blob/master/src/index.coffeeãåç
§ããŠãã ããïŒ
次ã®æ¹æ³ã§ãããŒãã€ã¡ãŒãžãèªåã§ã€ã³ããŒãããŠã¿ãããšãã§ããŸãã
// var Vibrant = require('node-vibrant')
// var NodeImage = require('node-vibrant/lib/image/node')
// var v = new Vibrant(uri, {Image: NodeImage})
ç·šéïŒæ°ã«ããªãã§ãã ããã ãã©ããŒãããã³ã¡ã³ããèŠãã°ããã§ãã require('node-vibrant/lib/index')
ãæ©èœããªãå Žåãäžèšã®æ¹æ³ãæ©èœããŸããã
React Nativeãã»ããã¢ããããæéãåããããã¹ããè¡ããŸãã
@ stovmascriptrn -nodeifyã«ã€ããŠã®ãããºã¢ããã«æè¬ããŸãã ãŸãã React-Nativifyã¯ææãªã¢ãããŒãã®ããã§ãããè©ŠãæéããããŸããã§ããã ç§ã¯çŸåšå¥ã®ãããžã§ã¯ãã«åãçµãã§ããŸãããæ¥é±èª¿æ»ããäºå®ã§ãã
@chetstone Coolã次ã«ãReactNativityã«ã€ããŠã®ãããºã¢ããã«æè¬ããŸãã è©ŠããŠã¿ããšããããã£ãšæ°ã«å ¥ã£ãŠããŸãã ãã ãããã¬ãŒããªãããããŸãã
rn-nodeifyã䜿çšãããšãã»ãšãã©ãã¹ãŠãèªåçã«åŠçãããŸãã ããªããå¯äžã®æ°ããããã±ãŒãžãã€ã³ã¹ããŒã«ããåŸãã€ã³ã¹ããŒã«åŸã®ã¹ã¯ãªãããå®è¡ããããã«èŠããŠããïŒããªãã¡ãããã¯åŸã«å®è¡ãããŸãnpm install
ã§ã¯ãªããåŸã«npm install some-package --save
ïŒã ããã»ã©ãããã§ã¯ãªãã®ã¯ãrn-nodeifyãçµäºããååŸã«package.jsonãä¿åããŠåŸ©å
ããªãéããããããã®ãã®ãè¿œå ãããããšã§ããããã¯ãã€ã³ã¹ããŒã«åŸã®ã¹ã¯ãªãããè¿œå ããå Žåãåºæ¬çã«ããã«ããå¿
èŠã¯ãããŸããã ã ãŸããããã¯ããªãã®node_modulesã«å
¥ããçŽæ¥æ··ä¹±ãå§ããŸã-äžæ¹ããããäœãå£ããªããã°ã誰ãæ°ã«ããŸãããããã¯ç¡èŠãããŸãããïŒ ç§ã¯ãããŸã§ãã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠãããæºè¶³ããŠããŸãã
ReactNativityãœãªã¥ãŒã·ã§ã³ã¯IMOãããšã¬ã¬ã³ãã§ãç¬èªã®ãã³ãã«ãã©ã³ã¹ãã©ãŒããŒé¢æ°ãRN Packagerã«æäŸã§ãïŒè¶
ã¯ãŒã«ïŒãbabel-plugin-rewrite-requireã䜿çšããŠrequire()
åŒã³åºããŸãã¯import
ãå€æŽã§ããŸããã³ã³ãã€ã«äžã«ã³ã¢ããŒãã¢ãžã¥ãŒã«ã®process
ã__dirname
ãããªããŒãã°ããŒãã«ã«ãåãããšãèšããŸã-rn-nodeifyã¯ãããã«ããªãåºç¯ãªã·ã ãæäŸããŸãããReactNativityã®æ¹æ³ã§ã¯ãç¬èªã®ã·ã ãç¶æããå¿
èŠããããŸãã
ã©ã¡ãã®æ¹æ³ã§ããåãèãã«ãã©ãçããŸãã...
ãã®ããã«ã€ã³ããŒãããåŸïŒ
import Vibrant from 'node-vibrant/lib';
ãã®ãšã©ãŒãçºçããŸãïŒ
ãªããžã§ã¯ãã®ãããã¿ã€ãã¯ããªããžã§ã¯ããŸãã¯nullã®ã¿ã§ããå¯èœæ§ããããŸãïŒæªå®çŸ©
çºä¿¡å ïŒ_node_modules / inherits / inherits_browser.jsïŒ5_ïŒç¶æ¿ã¢ãžã¥ãŒã«ã®ãã©ãŠã¶ããŒãžã§ã³ïŒã
ãã®é¢æ°ãçŸåšäœ¿çšããŠãã
ãç¶æ¿ãããã¹ãŒããŒã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯ãããã¿ã€ããå¿ èŠã§ã
ãã®é¢æ°ã«æž¡ãããã¯ãã®ã¹ãŒããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãªããå®éã«ã¯ã€ã³ã¹ã¿ã³ã¹åãããã¯ã©ã¹ã§ãããããçºçããŠããããã§ãããããã£ãŠã superCtorãsuperCtor = superCtor.constructor
ã«å€æŽãããšãæ©èœããŸãã
ã¹ã¿ãã¯ãã¬ãŒã¹ã«ç¶ããŠãããã¯jimpã«ãã£ãŠäœ¿çšããããªã¯ãšã¹ãããã±ãŒãžã«ã€ãªãããŸãããããããªã¯ãšã¹ãã®åé¡ãªã®ããjimpããªã¯ãšã¹ããæ£ãã䜿çšããŠããªãã®ãã¯ããããŸããã ã»ãšãã©ã®å ŽåãããŒãã§æ£åžžã«æ©èœããŸããããã©ãŠã¶ãŒçšã«ãã³ãã«ãããŠããå ŽåããŸãã¯react-nativeã®å Žåã«ã®ã¿æ©èœããŸãã
培åºçãªå ±åãããããšãããããŸããã ã§ã¯ãããŒãã掻æ°ã«æºã¡ãRNã§åäœãããã«ã¯ã_inherits_ãå€æŽããã ãã§ååã§ããããããšããŸã è¡ãè©°ãŸã£ãŠããŸããïŒ
2016幎11æ6æ¥ã7ïŒ24 -0700ã§ãããŒãã£ã³Å Å¥ovÃÄekã®[email protected]ã¯ãæžããŸããïŒ
@chetstone ïŒhttps://github.com/chetstoneïŒãã£ããããReactNativityã«ã€ããŠã®ãããºã¢ããã«æè¬ããŸãã è©ŠããŠã¿ããšããããã£ãšæ°ã«å ¥ã£ãŠããŸãã ãã ãããã¬ãŒããªãããããŸãã
rn-nodeifyã䜿çšãããšãã»ãšãã©ãã¹ãŠãèªåçã«åŠçãããŸãã æ°ããããã±ãŒãžãã€ã³ã¹ããŒã«ããåŸãã€ã³ã¹ããŒã«åŸã®ã¹ã¯ãªãããå®è¡ããããšãå¿ããªãã§ãã ããïŒã€ãŸããnpmã®ã€ã³ã¹ããŒã«åŸã«å®è¡ãããŸãããnpmã®ã€ã³ã¹ããŒã«åŸã«ã¯å®è¡ãããŸãã-package --saveïŒã ããã»ã©ãããã§ã¯ãªãã®ã¯ãrn-nodeifyãçµäºããååŸã«package.jsonãä¿åããŠåŸ©å ããªãéããããããã®ãã®ãè¿œå ãããããšã§ããããã¯ãã€ã³ã¹ããŒã«åŸã®ã¹ã¯ãªãããè¿œå ããå Žåãåºæ¬çã«ããã«ããå¿ èŠã¯ãããŸããã ã ãŸããããã¯ããªãã®node_modulesã«å ¥ããçŽæ¥æ··ä¹±ãå§ããŸã-äžæ¹ããããäœãå£ããªããã°ã誰ãæ°ã«ããŸãããããã¯ç¡èŠãããŸãããïŒ ç§ã¯ãããŸã§ãã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠãããæºè¶³ããŠããŸãã
ReactNativityãœãªã¥ãŒã·ã§ã³ã¯IMOãããšã¬ã¬ã³ãã§ãç¬èªã®ãã³ãã«ãã©ã³ã¹ãã©ãŒããŒé¢æ°ãRN Packagerã«æäŸã§ãïŒè¶ ã¯ãŒã«ïŒãbabel-plugin-rewrite-requireã䜿çšããŠrequireïŒïŒåŒã³åºããŸãã¯ã³ã¢ããŒãã¢ãžã¥ãŒã«ã®ã€ã³ããŒããã³ã³ãã€ã«äžã®ãã©ãŠã¶ã®ããŒãžã§ã³ã ãŸããäŸåé¢ä¿ããã现ããå¶åŸ¡ã§ããŸããnode-libs-browserãŸãã¯browserifyã®ããããã䜿çšããŠããã¹ãŠã®ãã©ãŠã¶ãŒããŒãžã§ã³ãäžåºŠã«ã€ã³ã¹ããŒã«ã§ããŸãïŒã©ã¡ããããã©ãŠã¶ãŒããŒãžã§ã³ãžã®ãããã³ã°ããªããžã§ã¯ãã«æäŸããŸããããã«ã¯ãbabelãã©ã°ã€ã³ãæ§æããå¿ èŠããããŸãã ïŒã ãã®äžãfsã¢ãžã¥ãŒã«ã®react-native-level-fsã®ãããªããã±ãŒãžãéžæçã«è¿œå ã§ããŸãã ã©ã³ã¿ã€ã äŸå€ãçºçããããããããã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠã¢ããªã培åºçã«ãã¹ãããå¿ èŠããããŸãããã¹ãŠã®ã³ã¢ããŒãã©ã€ãã©ãªã«å¯Ÿå¿ãããã©ãŠã¶ãŒãããããã§ã¯ãªããrn-nodeifyã¯ããã«ããã«å¯ŸåŠããããšããŸãã processã__dirnameãªã©ã®ããŒãã°ããŒãã«ã«ã€ããŠãåãããšãèšããŸããrn-nodeifyã¯ãããã«ããªãåºç¯ãªã·ã ãæäŸããŸãããReactNativityã®æ¹æ³ã§ã¯ãç¬èªã®ã·ã ãç¶æããå¿ èŠããããŸãã
ã©ã¡ãã®æ¹æ³ã§ããåãèãã«ãã©ãçããŸãã...
ãã®ããã«ã€ã³ããŒãããåŸïŒ
'node-vibrant / lib'ããVibrantãã€ã³ããŒãããŸã
ãã®ãšã©ãŒãçºçããŸãïŒ
ãªããžã§ã¯ãã®ãããã¿ã€ãã¯ããªããžã§ã¯ããŸãã¯nullã®ã¿ã§ããå¯èœæ§ããããŸãïŒæªå®çŸ©
çºä¿¡å ïŒnode_modules / inherits / inherits_browser.jsïŒ5ïŒç¶æ¿ã¢ãžã¥ãŒã«ã®ãã©ãŠã¶ãŒããŒãžã§ã³ïŒã
ãã®é¢æ°ãçŸåšäœ¿çšããŠããããŒãïŒhttps://github.com/nodejs/node/blob/master/lib/util.js#L956-L969ïŒã§æŽæ°ãããšãæ°ããã«ã¹ã¿ã ãšã©ãŒãããªã¬ãŒãããŸãã
ãç¶æ¿ãããã¹ãŒããŒã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯ãããã¿ã€ããå¿ èŠã§ã
ãã®é¢æ°ã«æž¡ãããã¯ãã®ã¹ãŒããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãªããå®éã«ã¯ã€ã³ã¹ã¿ã³ã¹åãããã¯ã©ã¹ã§ãããããçºçããŠããããã§ãããããã£ãŠãsuperCtorïŒhttps://github.com/isaacs/inherits/blob/master /inherits_browser.js#L3ïŒããïŒsuperCtor = superCtor.constructorãåäœããŸãã
ã¹ã¿ãã¯ãã¬ãŒã¹ã«ç¶ããŠãããã¯jimpã«ãã£ãŠäœ¿çšããããªã¯ãšã¹ãããã±ãŒãžã«ã€ãªãããŸãããããããªã¯ãšã¹ãã®åé¡ãªã®ããjimpããªã¯ãšã¹ããæ£ãã䜿çšããŠããªãã®ãã¯ããããŸããã ã»ãšãã©ã®å ŽåãããŒãã§æ£åžžã«æ©èœããŸããããã©ãŠã¶ãŒçšã«ãã³ãã«ãããŠããå ŽåããŸãã¯react-nativeã®å Žåã«ã®ã¿æ©èœããŸãã
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubïŒhttps://github.com/akfish/node-vibrant/issues/29#issuecomment-258684020ïŒã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŸãïŒhttps://github.com/notifications/unsubscribe -auth / AA7l1wl7ggsGTqd7RZlpwWup6T3Ookl7ks5q7eMSgaJpZM4KeOV2ïŒã
@stovmascriptã€ãã«ã react-nativify
ãè©ŠããŠã¿ãæéãã§ããŸããã ç§ã¯ããªããããããã«ç§ããããæãéãããšã¯æããªãã ãããæ©èœãããããã«å¿
èŠãªãããã³ã°ã®éã¯ãã»ãŒç¡éã«ããããã§ãã
ãŸããå€å§åšãåäœãããããšãã§ããŸããã§ããã ç§ã¯ã€ãã«ãrn-cli.config.jsã§getTransformModulePath()
ãæå®ããæ©èœããç§ã®ããŒãžã§ã³ã®react-nativeïŒ0.32.1ïŒã®ãªã°ã¬ãã·ã§ã³ã«ãã£ãŠåé€ãããããšãçºèŠããŸããã ããã§ã npm start
ã³ãã³ãã§--transformer
ã䜿çšããŠããã®åé¡ãåé¿ããŸããã
ãã®åŸãããã±ãŒãžã£ãŒã¯ãã€ã³ã¹ããŒã«ãããŠããŠããäœããã®çç±ã§util
ã¢ãžã¥ãŒã«ãèŠã€ããããšãã§ããŸããããšãã§ãããšæãããutil
ããã€ãã®ã¢ãžã¥ãŒã«ïŒããå¿
èŠãªãšãã«png.js
ïŒã§ã¯ãªããä»ïŒ _stream_readable
ïŒã
_stream_readable
ã®util
ã®èŠä»¶ãã³ã¡ã³ãã¢ãŠãããŠãããã«å
ã«é²ãããšãã§ãããã©ããã確èªããŸãããã jimp
ãprocess
å®çŸ©ãããŠããªãå€æ°ãjimp
ãããšãã«å€±æããŸããã·ã ã
æåŸã«ããã®èšäºãèªãã åŸãç§ã¯ãã®ã¢ãããŒãããããããæºåãã§ããŠããŸãã ç§ã¯rn-nodify
è©ŠããããšããããŸããããããªãã®çµéšãèãããšããã£ãšæéãç¡é§ã«ãªããšæããŸãã
å®éã®ãã¬ããã©ã€ãã©ãªã®åšãã«Androidçšã®ãã€ãã£ãã©ãããŒãæ§ç¯ããæ¹ãã¯ããã«ç°¡åãªããã§ãã ç§ã¯Javaãç¥ããŸããããå€åããã¯åŠã¶æéã§ãã ãŸããiOSã§ã¯æ©èœããŸããããiOSã¢ããªã§colorgrabberã³ã³ããŒãã³ãã䜿çšããŠæåããŠããŸãã ãã¬ããã»ã©ãã«æ©èœã§ã¯ãããŸããããç§ã®ç®çã«ã¯ååã§ãã
åªããAndroidPaletteã¯ã©ã¹ããã€ãã£ãã¢ãžã¥ãŒã«ãšããŠã©ããããreact-native-paletteãå ¬ââéããŸããã ãã®ã³ã³ããŒãã³ãã¯iOSã§ãåæ§ã®æ©èœããµããŒãããŠããŸãããããã€ãã®åé¡ããããŸãã
ãã€ãã£ããµããŒããããäžè¶³ããŠãããããiOSã§åäœããnode-vibrantãªã©ã®javascriptã®ã¿ã®ãœãªã¥ãŒã·ã§ã³ããããšäŸ¿å©ã§ãã
é·ãé
ãã§ããããªããã å®ç掻ãèµ·ãã£ãã
äžèšã®ã³ã¡ã³ãããç§ãç解ããŠããããšããããã®åé¡ã¯jimp
ã®fs
ãžã®åç
§ã«é¢é£ããŠããããã§ããããã¯react-nativeç°å¢ã§ã¯å©çšã§ããŸããã
jimp
ã®ãœãŒã¹[1]ããã process.env.ENVIRONMENT
ã"BROWSER"
ã«èšå®ãããšã fs
ã¢ãžã¥ãŒã«ã®èŠæ±ãã¹ããããããŸãã
èããããåé¿çïŒ
// Prevent jimp from requiring `fs`
process.env.ENVIRONMENT = 'BROWSER'
// Require node.js version vibrant explicitly
const Vibrant = require('node-vibrant/lib/index')
// Load image file into a Buffer in some react-native compatible way
let buf = react_native_read_file('path/to/image')
// Pass buffer to node-vibrant
Vibrant.from(buf).getPalette()
ãã®ã¢ãããŒããæ©èœãããã©ããã誰ãã確èªã§ããŸããïŒ ããããšãã
GitHubã«ã¯ãã¹ã¬ãããè©°ãŸãããããšãªããµããŒãã瀺ãããã®åé¡ã«å¯Ÿããðåå¿ãããããšãæãåºããŠãã ãã
ææ°ããŒãžã§ã³ã3.2.0-alphaããReactNativeã§ã¯ã©ãã·ã¥ãã ãå€æ°ãèŠã€ãããŸããïŒselfããšãããšã©ãŒã衚瀺ãããŸã
ãã£ã1ã€ã®æååãåé€ããåŸïŒ
import * as Vibrant from 'node-vibrant';
ã¢ããªã¯åäœãããããReactNativeã§ãã¹ãããå¯èœæ§ãããããŸããã
ææ°ããŒãžã§ã³ã3.2.0-alphaããReactNativeã§ã¯ã©ãã·ã¥ãããšã©ãŒ_ãå€æ°ãèŠã€ãããŸããïŒselfã_
ãã£ã1ã€ã®æååãåé€ããåŸïŒ
import * as Vibrant from 'node-vibrant';
ã¢ããªã¯åäœãããããReactNativeã§ãã¹ãããå¯èœæ§ãããããŸããã
ç³ãèš³ãããŸããããå®éã«ã¯ååŸã§ããŸãããããŒãã«æŽ»æ°ã®ããlibãRNã§åäœããŠãããã©ããã
@Psiiiruséã¢ã«ãã¡ãã«ãã§åäœããã¯ãã§ã
ç§ã¯react-nativeã§Can't find variable: document
ãååŸããŠããŸãã
æãåèã«ãªãã³ã¡ã³ã
ææ°ããŒãžã§ã³ã3.2.0-alphaããReactNativeã§ã¯ã©ãã·ã¥ãã ãå€æ°ãèŠã€ãããŸããïŒselfããšãããšã©ãŒã衚瀺ãããŸã
ãã£ã1ã€ã®æååãåé€ããåŸïŒ
import * as Vibrant from 'node-vibrant';
ã¢ããªã¯åäœãããããReactNativeã§ãã¹ãããå¯èœæ§ãããããŸããã