| c:\Dev\workspace6\AndroidApp\node_modules\react-native\node_modules\ws\node_modules\utf-8-validate > if not defined npm_config_node_gyp (node “C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js” rebuild ) else (node rebuild ) Building the projects in this solution one at a time. To enable parallel build, please add the “/m” switch. validation.cc C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(336): error C2988: unrecognizable template declaration/definition [c:\Dev\workspace6\AndroidApp\nod e_modules\react-native\node_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(336): error C2059: syntax error : ‘using’ [c:\Dev\workspace6\AndroidApp\node_modules\react-native\n ode_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(469): error C2988: unrecognizable template declaration/definition [c:\Dev\workspace6\AndroidApp\nod e_modules\react-native\node_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(469): error C2059: syntax error : ‘using’ [c:\Dev\workspace6\AndroidApp\node_modules\react-native\n ode_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(576): error C2061: syntax error : identifier ‘WeakCallbackType’ [c:\Dev\workspace6\AndroidApp\node_ modules\react-native\node_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(642) : see reference to class template instantiation ‘v8::PersistentBase<T>’ being compiled C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(637): error C2253: ‘PersistentBase<T>’ : pure specifier or abstract override specifier only allowed o n virtual function [c:\Dev\workspace6\AndroidApp\node_modules\react-native\node_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(844): error C2253: ‘Global<T>’ : pure specifier or abstract override specifier only allowed on virtua l function [c:\Dev\workspace6\AndroidApp\node_modules\react-native\node_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(847) : see reference to class template instantiation ‘v8::Global<T>’ being compiled C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(852): error C2988: unrecognizable template declaration/definition [c:\Dev\workspace6\AndroidApp\nod e_modules\react-native\node_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj] C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(852): error C2059: syntax error : ‘using’ [c:\Dev\workspace6\AndroidApp\node_modules\react-native\n ode_modules\ws\node_modules\utf-8-validate\build\validation.vcxproj]
. . 중간생략 . . gyp ERR! build error gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit code: 1 gyp ERR! stack at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:270:23) gyp ERR! stack at emitTwo (events.js:87:13) gyp ERR! stack at ChildProcess.emit (events.js:172:7) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12) gyp ERR! System Windows_NT 6.1.7601 gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" gyp ERR! cwd c:\Dev\workspace6\SampleApp\node_modules\react-native\node_modules\ws\node_modules\utf-8-validate gyp ERR! node -v v4.2.4 gyp ERR! node-gyp -v v3.0.3 gyp ERR! not ok
- Ji@ECHOMANIA c:\Dev\workspace6\SampleApp\node_modules\react-native\node_modules\ws\node_modules\bufferutil > if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node rebuild ) Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch. bufferutil.cc C:\Users\Ji\.node-gyp\4.2.4\include\node\v8.h(336): error C2988: unrecognizable template declaration/definition [c:\Dev\workspace6\SampleApp\nod e_modules\react-native\node_modules\ws\node_modules\bufferutil\build\bufferutil.vcxproj] . . .
정확히는 모르겠지만 node-gyp을 통해서 utf-8-validate 모듈, bufferutil 모듈을 빌드하려고 하는데 에러가 나는것 같아 보입니다.
이러이러한 조건들이 필요한데 여기서 제일 중요한게 비쥬얼 스튜디오 버전!!! 저는 2012라서 저런 에러가 났던것 같기도 하네요. VS2012로 만들고 있는 프로그램이 있기도 했고, 또다른 비쥬얼 스튜디오 버전을 설치해가면서 하기에는 귀찮니즘이 생겨서..다른 방법을 찾아보기로 했습니다.
react-native init GarbageApp 을 하면 react-native-cli 모듈을 통해서 GarbageApp이라는 프로젝트가 생성되면서 최신 버전의 react-native 모듈을 받아온다.
모듈은 독립적으로 다운로드 받아지고 사용될 수 있기 때문에 새로운 버전을 다른 디렉토리에서 받은 후 기존 프로젝트의 react-native를 지우고, 새 버전을 넣어도 작동할 것이다.
그래서 새로운 프로젝트를 하나 생성하고 node_modules/react-native 를 복사해서 기존 프로젝트의 node_modules 안에 붙여넣어봤습니다. (복사할때 파일 이름이 너무 길다고 157개 정도의 파일들을 복사 못하더군요. 그래서 git bash shell에서 cp 명령을 통해서 복사했더니 되었습니다.)
공식 사이트에서 업그레이드에 관한 순서가 하나 더 남아있던게 생각이 나서 다시 RN 공식 사이트의 Upgrade 가이드를 보니 react-native upgrade를 하라고 써있더군요. 새 패키지의 업데이트된 내용을 프로젝트에 적용시키기 위해서 꼭 해야하는 부분이더라고요. 예를 들어 android/app/build.gradle에 compile “com.facebook.react:react-native:0.19.+” 을 compile “com.facebook.react:react-native:0.20.+” 으로 바꾸는 작업이 필요합니다.
다만 react-native upgrade를 하면 기존의 설정 파일들 (setting.gradle 이라던가 build.gradle)들을 업데이트 시키려고 하고, 혹시나 그런 파일들의 내용을 바꾼적이 있다면 (네이티브 모듈을 만들어서 사용하려고 MainActivity.java를 바꿨다던가 하면..) 기존 파일들을 무시하고 덮어쓸것인지 아니면 기존 파일을 그대로 유지할 것 인지 물어봅니다. 어떤점이 바뀌었는지도 비교 가능하니까 잘 보면서 진행하면 됩니다.
react-native upgrade가 끝나고 다시 앱을 실행해보니 이제 잘 됩니다! ToT 몇시간에 걸친 업그레이드가 간신히 끝났네요.
아이고 힘드네요..그래도 자동크기 조절되는 TextInput컴포넌트라던가 안드이로드 웹뷰에 대한 기능 추가 같은 것들을 놓치지 않기 위해서는 업그레이드가 꼭 필요했던것 같습니다. 각종 버그들을 피하기 위해서도 말이죠..
저처럼 헤매는 분들을 위해서 이 글이 도움이 되었으면 좋겠습니다.
ps. 글을 쓰는건 참 어렵네요;; 평소에 글 안써보다가 미디움을 시작하면서 글을 꾸준히 쓰기로 결심했는데, 자주하다 보면 늘겠죠?