[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.