[fabcar 예제 오류 발생]


* (2018.05.08) 새로 fabric-samples 프로젝트를 받아서 fabcar 예제를 진행할 경우 아래와 같은 오류가 발생합니다.


* startFabric.sh 실행 -> node enrollAdmin.js 실행 시 오류!


[user@localhost fabcar]$ node enrollAdmin.js module.js:549 throw err; ^ Error: Cannot find module './api.js' at Function.Module._resolveFilename (module.js:547:15) at Function.Module._load (module.js:474:25) at Module.require (module.js:596:17) at require (internal/module.js:11:18) at Object.<anonymous> (/home/user/go/src/github.com/hyperledger/fabric-samples/fabcar/node_modules/fabric-ca-client/lib/FabricCAClientImpl.js:19:11) at Module._compile (module.js:652:30) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3)



[원인 파악 및 해결]


* 이유는 fabric-ca-client 의 FabricCAClientImpl.js 에서 api.js 를 사용하는데

  해당 위치 (./fabcar/node_modules/fabric-ca-client/lib/) 에 api.js 파일이 없습니다.


* fabric-ca-client 패키지를 확인해보니 최신버전이 1.1.0 -> 1.1.1 로 업데이트 되면서 내용이 약간씩 바뀌었으며 그로인해 필요한 파일들이 누락된듯 합니다.


* 따라서 저는 기존 1.1.0 버전 모듈로 다시 설치해서 문제를 해결했습니다.



<fabcar 폴더 안의 package.json 내용>

{ "name": "fabcar", "version": "1.0.0", "description": "Hyperledger Fabric Car Sample Application", "main": "fabcar.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "fabric-ca-client": "~1.1.0", "fabric-client": "~1.1.0", "grpc": "^1.6.0" }, "author": "Anthony O'Dowd", "license": "Apache-2.0", "keywords": [ "Hyperledger", "Fabric", "Car", "Sample", "Application" ] }


*fabcar 폴더 안에서 npm install --unsafe-perm 을 통해 package.json 에 입력된 모듈들을 자동으로 설치하게 됩니다.

* dependencies 항목에 fabric-ca-client 버전의 경우 틸드형식으로 지정되어 표시된 버전 마지막 자리의 최신버전으로 설치되게 됩니다.
(즉 현재 저상태로 실행하면 fabric-ca-client 버전은 1.1.1 이 설치됩니다.)

* 틸드형식을 제거하고 고정 버전을 설치하면 정상적으로 fabcar 예제를 테스트 하실 수 있습니다.
(node_modules 폴더를 삭제한 후 진행)

"name": "fabcar", "version": "1.0.0", "description": "Hyperledger Fabric Car Sample Application", "main": "fabcar.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "fabric-ca-client": "1.1.0", "fabric-client": "~1.1.0", "grpc": "^1.6.0" }, "author": "Anthony O'Dowd", "license": "Apache-2.0", "keywords": [ "Hyperledger", "Fabric", "Car", "Sample", "Application" ] }


[user@localhost fabcar]$ npm install --unsafe-perm ....... [user@localhost fabcar]$ node enrollAdmin.js

* 추후에 fabric-ca-client 모듈이 안정화 되면 신경쓰지 않으셔도 될 듯 합니다.


* 기존 모듈에서 api.js 파일을 복사해 와도 가능할 것으로 보이지만 그 외 어떤 다른파일이 누락되어 있을지 알 수 없어서

  이전버전을 설치하는 방향으로 진행했습니다.



--------------------------------------------------------------

(English)


['fabcar' example error]


* (2018.05.08) If you take a new fabric-samples project and proceed with the fabcar example, the following error occurs.


* Run 'startFabric.sh' -> error when running 'node enrollAdmin.js'


[user@localhost fabcar]$ node enrollAdmin.js module.js:549 throw err; ^ Error: Cannot find module './api.js' at Function.Module._resolveFilename (module.js:547:15) at Function.Module._load (module.js:474:25) at Module.require (module.js:596:17) at require (internal/module.js:11:18) at Object.<anonymous> (/home/user/go/src/github.com/hyperledger/fabric-samples/fabcar/node_modules/fabric-ca-client/lib/FabricCAClientImpl.js:19:11) at Module._compile (module.js:652:30) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3)


[Cause & Solution]


* There is no api.js file in that location (./fabcar/node_modules/fabric-ca-client/lib/).


* Checking the fabric-ca-client package shows that the latest version has been updated with 1.1.0 -> 1.1.1, and the contents have been slightly changed, so that the necessary files are missing.


* So I reinstalled it with the existing 1.1.0 version module and solved the problem.


<'package.json' contents in fabcar folder>

{ "name": "fabcar", "version": "1.0.0", "description": "Hyperledger Fabric Car Sample Application", "main": "fabcar.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "fabric-ca-client": "~1.1.0", "fabric-client": "~1.1.0", "grpc": "^1.6.0" }, "author": "Anthony O'Dowd", "license": "Apache-2.0", "keywords": [ "Hyperledger", "Fabric", "Car", "Sample", "Application" ] }


* 'npm install --unsafe-perm' inside the 'fabcar' folder will automatically install the modules in package.json. * Dependencies item will be installed with the latest version of fabric-ca-client(1.1.1). (by tiled version range : ~1.1.0)
* If you remove the tilde format and install the fixed version, you can test the fabcar example normally.    (proceed after deleting the node_modules folder)

{ "name": "fabcar", "version": "1.0.0", "description": "Hyperledger Fabric Car Sample Application", "main": "fabcar.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "fabric-ca-client": "1.1.0", "fabric-client": "~1.1.0", "grpc": "^1.6.0" }, "author": "Anthony O'Dowd", "license": "Apache-2.0", "keywords": [ "Hyperledger", "Fabric", "Car", "Sample", "Application" ] }


[user@localhost fabcar]$ npm install --unsafe-perm ....... [user@localhost fabcar]$ node enrollAdmin.js

* If the 'fabric-ca-client' module stabilizes later, you do not need to worry about it.


* It seems possible to copy the 'api.js' file from the existing module(1.1.0), but I could not figure out what other files were missing, so i proceeded to install the previous version.


+ Recent posts