testinggospels / camouflage

Camouflage is a backend mocking tool for HTTP, gRPC, Websockets and Thrift protocols, which helps you carry out your front end prototyping, unit testing, functional/performance testing in silos, in absence of one or more Microservices/APIs.
https://testinggospels.github.io/camouflage/
MIT License
270 stars 26 forks source link

Init command is not compatible with volta #145

Closed zerda closed 2 years ago

zerda commented 2 years ago

Describe the bug Volta is a node version manager like nvm, and camouflage init is not compatible with volta library structure.

In volta, npm root -g result is /Users/bob/.volta/tools/image/node/16.13.0/lib/node_modules, but camouflage is located in /Users/bob/.volta/tools/image/packages/camouflage-server.

From what I understand, site_root should be located as bin/camouflage.js parent directory. let site_root = path.join(__dirname, ".."); should be good enough in many cases.

To Reproduce Steps to reproduce the behavior:

$ volta install camouflage-server
$ camouflage init
node:internal/fs/utils:344
    throw err;
    ^

Error: ENOENT: no such file or directory, stat '/Users/bob/.config/yarn/global/node_modules/camouflage-server/mocks'
    at Object.statSync (node:fs:1536:3)
    at Object.statSync (/Users/bob/.volta/tools/image/packages/camouflage-server/lib/node_modules/camouflage-server/node_modules/graceful-fs/polyfills.js:311:34)
    at statSync (/Users/bob/.volta/tools/image/packages/camouflage-server/lib/node_modules/camouflage-server/node_modules/fs-extra/lib/util/stat.js:10:52)
    at getStatsSync (/Users/bob/.volta/tools/image/packages/camouflage-server/lib/node_modules/camouflage-server/node_modules/fs-extra/lib/util/stat.js:24:19)
    at Object.checkPathsSync (/Users/bob/.volta/tools/image/packages/camouflage-server/lib/node_modules/camouflage-server/node_modules/fs-extra/lib/util/stat.js:49:33)
    at Object.copySync (/Users/bob/.volta/tools/image/packages/camouflage-server/lib/node_modules/camouflage-server/node_modules/fs-extra/lib/copy-sync/copy-sync.js:24:38)
    at Object.<anonymous> (/Users/bob/.volta/tools/image/packages/camouflage-server/lib/node_modules/camouflage-server/bin/camouflage.js:88:9)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32) {
  errno: -2,
  syscall: 'stat',
  code: 'ENOENT',
  path: '/Users/bob/.config/yarn/global/node_modules/camouflage-server/mocks'
}

Expected behavior Empty directory is initialized.

Desktop (please complete the following information):

shubhendumadhukar commented 2 years ago

There was a similar issue with yarn earlier, #139

Seems appropriate to use degit for initialising a Camouflage project. I have created a template repository for such use cases. Please use following command to replace camouflage init

degit camouflagejs/init myproject

OR

 npx degit camouflagejs/init myproject

TODO: Update docs